import java.util.*;
import java.util.stream.Collectors;
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
List<User> userList = Arrays.asList(
new User("Alice", 25),
new User("Bob", 20),
new User("Charlie", 25)
);
TreeSet<User> treeSet = userList.stream()
.collect(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparingInt(User::getAge)
.thenComparing(User::getName))));
treeSet.forEach(user -> System.out.println("Name: " + user.getName() + ", Age: " + user.getAge()));
}
}
TreeSet的特性对这种实现的影响
- 排序特性:TreeSet是基于红黑树实现的,它会对元素进行排序。在上述实现中,我们通过
Comparator.comparingInt(User::getAge).thenComparing(User::getName)
定义了排序规则,使得TreeSet中的User对象按照age从小到大排序,age相同则按照name的字典序排序。这保证了集合中元素的有序性,符合题目要求。
- 唯一性:TreeSet不允许有重复元素。如果有两个User对象的age和name都相同,那么在添加到TreeSet时,第二个相同的对象将不会被添加进去。这种特性保证了集合中元素的唯一性。