初始数据:
Person() {
// id
private Long id; // 年龄 private Integer age; // 姓名 private String name; // 城市 private String city; } // 年龄,姓名,城市 Person person1 = new Person(1, 12, "张三", "北京"); Person person2 = new Person(2, 13, "李四", "北京"); Person person3 = new Person(3, 12, "王五", "上海"); Person person4 = new Person(4, 13, "赵六", "北京"); List<Person> persons = new ArrayList(); persons.add(person1); persons.add(person2); persons.add(person3); persons.add(person4);
- 对某个字段求和
persons.stream()
.mapToInt(Person::getAge).sum(); - 对某个字段值分组
persons.stream()
.collection(Collectors.groupingBy(Person::getCity)) - 多字段复杂分组
- 过滤(结果:保留符合条件的数据)
persons.stream()
.filter(a -> Objects.equals(a.getName(), "张三"))
.collect(Collectors.toList()); - 最值
- 转map
Map<Long, Person> personMap = persons.stream()
.collect(Collectors.toMap(Person::getId, a -> a, (k1, k2) -> k1)); - 排序
// 比较id,顺序 persons.sort(Comparator.comparing(Person::getId)); // 先比较id,再比较年龄 persons.sort(Comparator.comparing(Person::getId).thenCpmpareing(Person.getAge));
- 去重
- 获取list某个字段组装新list
List<String> names = persons.stream() .map(Person::getName) .collect(Collectors.toList());