一、汇总
public class Demo {
public static void main(String[] args) {
List<User> users = Arrays.asList(new User("张三", 16, 83.0, "深圳"),
new User("李四", 14, 96.0, "上海"),
new User("王五", 13, 86.0, "北京"),
new User("赵六", 18, 93.0, "武汉"));
List<User> filterUsers = users.stream().filter(e -> e.getScore() > 90).collect(Collectors.toList());
List<String> nameList = users.stream().map(User::getName).collect(Collectors.toList());
Set<String> setList = users.stream().map(User::getName).collect(Collectors.toSet());
Map<String, Integer> nameAge = users.stream().collect(Collectors.toMap(User::getName, User::getAge));
List<User> sortUsers = users.stream().sorted((o1, o2) -> (int) (o1.getScore() - o2.getScore()))
.collect(Collectors.toList());
Map<String, List<User>> nameMap = users.stream().collect(Collectors.groupingBy(User::getName));
Map<String, List<User>> nameAgeMap = users.stream()
.collect(Collectors.groupingBy(e -> e.getName() + e.getAge()));
Map<String, List<String>> nameAddressList = users.stream()
.collect(Collectors.groupingBy(User::getName,
Collectors.mapping(User::getAddress, Collectors.toList())));
Map<String, Set<String>> nameAddressSet = users.stream()
.collect(Collectors.groupingBy(User::getName,
Collectors.mapping(User::getAddress, Collectors.toSet())));
}
@Data
@AllArgsConstructor
static class User {
private String name;
private Integer age;
private Double score;
private String address;
}
}
二、细分
1、过滤(filter)
public class Demo {
public static void main(String[] args) {
List<User> users = Arrays.asList(new User("张三", 16, 83.0),
new User("李四", 14, 96.0),
new User("王五", 13, 86.0),
new User("赵六", 18, 93.0));
List<User> newUsers = users.stream().filter(e -> e.getScore() > 90).collect(Collectors.toList());
newUsers.forEach(System.out::println);
}
@Data
@AllArgsConstructor
static class User {
private String name;
private Integer age;
private Double score;
}
}
2、排序(sort)
public class Demo {
public static void main(String[] args) {
List<User> users = Arrays.asList(new User("张三", 16, 83.0),
new User("李四", 14, 96.0),
new User("王五", 13, 86.0),
new User("赵六", 18, 93.0));
List<User> newUsers = users.stream().sorted((o1, o2) -> (int) (o1.getScore() - o2.getScore()))
.collect(Collectors.toList());
newUsers.forEach(System.out::println);
}
@Data
@AllArgsConstructor
static class User {
private String name;
private Integer age;
private Double score;
}
}
3、分组(groupby)
3.1 单属性分组
public class Demo {
public static void main(String[] args) {
List<User> users = Arrays.asList(new User("张三", 16, 83.0),
new User("李四", 14, 96.0),
new User("王五", 13, 86.0),
new User("赵六", 18, 93.0));
Map<String, List<User>> nameMap = users.stream().collect(Collectors.groupingBy(User::getName));
nameMap.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
}
@Data
@AllArgsConstructor
static class User {
private String name;
private Integer age;
private Double score;
}
}
3.2 多个属性分组
public class Demo {
public static void main(String[] args) {
List<User> users = Arrays.asList(new User("张三", 16, 83.0),
new User("李四", 14, 96.0),
new User("王五", 13, 86.0),
new User("赵六", 18, 93.0));
Map<String, List<User>> nameMap = users.stream().collect(Collectors.groupingBy(e -> e.getName() + e.getAge()));
nameMap.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
}
@Data
@AllArgsConstructor
static class User {
private String name;
private Integer age;
private Double score;
}
}