Java的Stream对集合处理非常方便
List<Person> list = Arrays.asList(
new Person("1992", 10),
new Person("1992", 10),
new Person("2001", 14),
new Person("2003", 12),
new Person("1996", 12),
new Person("1998", 12),
new Person("2003", 13)
);
System.out.println(list);
// filter 过滤
List<Person> personList = list.stream()
.filter(person -> person.getAge() > 12)
.collect(Collectors.toList());
System.out.println(personList);
// distinct 去重
personList = list.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(personList);
// sorted 排序 按照年龄
personList = list.stream()
.sorted(Comparator.comparing(Person::getAge))
.collect(Collectors.toList());
System.out.println(personList);
// sorted 排序 按照年龄倒叙,年龄相同,按照姓名倒叙
personList = list.stream()
.filter(person -> person.getAge() > 10)
.sorted(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName, Comparator.reverseOrder()))
.collect(Collectors.toList());
System.out.println(personList);
// limit 限制返回个数
personList = list.stream()
.filter(person -> person.getAge() > 10)
.limit(2)
.collect(Collectors.toList());
System.out.println(personList);
// map 转换
List<Integer> integerList = list.stream()
.filter(person -> person.getAge() > 10)
.map(Person::getAge)
.collect(Collectors.toList());
System.out.println(integerList);
// count 集合长度
long count = list.stream()
.count();
System.out.println(count);
// reduce 累加
Integer integer = list.stream().map(Person::getAge)
.reduce(0, Integer::sum);
System.out.println(integer);
integer = list.stream().map(Person::getAge)
.reduce(0, (p1, p2) -> p1 + p2);
System.out.println(integer);
// reduce 累乘
integer = list.stream().map(Person::getAge)
.reduce((p1, p2) -> p1 * p2).orElse(0);
System.out.println(integer);
// reduce 最大
integer = list.stream().map(Person::getAge)
.reduce(Integer::max).orElse(0);
System.out.println(integer);
// reduce 最小
integer = list.stream().map(Person::getAge)
.reduce(Integer::min).orElse(0);
System.out.println(integer);
}