java8小技巧

##对象去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
List<User> userList = new ArrayList<User>();
userList.add(new User("小黄",10));
userList.add(new User("小红",23));
userList.add(new User("小黄",78));
userList.add(new User("小黄",10));

//根据name属性去重
List<User> unique1 = userList.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new));

System.out.println(unique1.toString());

//根据name,age属性去重
List<User> unique2 = userList.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o ->
{
return o.getName() + "," + o.getAge();
}))), ArrayList::new));


System.out.println(unique2.toString());

##大小排序

1
2
3
4
5
6
7
8
//升序(默认)
list = list.stream()
.sorted(Comparator.comparing(Person::getAge))
.collect(Collectors.toList());
//降序
list = list.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.collect(Collectors.toList());

##排序有空值

1
2
3
4
5
6
7
8
9
10
11
12
//方式一:排序(按【创建时间】升序排列)
//如果创建时间有为空的就会报错
list = list.stream().sorted(Comparator.comparing(Person::getCreatetime))
.collect(Collectors.toList());

//方式二:排序(按【创建时间】升序排列)
//nullsLast方法表示如果创建时间为空就排列到最后面
list = list.stream().sorted(Comparator.comparing(t -> t.getCreatetime(), Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
//nullsFirst方法表示如果创建时间为空就排列到最前面
list = list.stream().sorted(Comparator.comparing(t -> t.getCreatetime(), Comparator.nullsFirst(Date::compareTo)))
.collect(Collectors.toList());

##多字段组合排序

1
2
3
//今日待跟踪(多字段组合排序)
list = list.stream().sorted(Comparator.comparing(Person::getAge).thenComparing(Comparator.comparing(Person::getCreatetime, Comparator.nullsLast(Date::compareTo))))
.collect(Collectors.toList());