准备数据
实体类
@Data
public class UserInfo {
String personNo;
String name;
int num;
int age;
}
类似输入
[
{"personNo": "123","name":"张三","age":20},
{"personNo": "123","name":"张三","age":21},
{"personNo": "1234","name":"李四","age":19}
]
1,把list中某个字段用逗号相连
joining(“,”)
String result = list.stream().map(UserInfo::getPersonNo).collect(Collectors.joining(","))
输出
123,123,1234
2,根据某个字段分组
groupingBy()
Map<String,List<UserInfo>> result = list.stream().collect(Collectors.groupingBy(UserInfo::getName)):
key为null时不报错的处理方法
public static <T,A> Collector<T ,?, Map<A,List<T>>> groupByWithNullKeys(Function<? super T,
? extends A> classifier){
return Collectors.toMap(
classifier,
Collections::singletonList,
(List<T> oldList,List<T> newEl) -> {
List<T> newList = new ArrayList<>(oldList.size()+1);
newList.addAll(oldList);
newList.addAll(newEl);
return newList;
}
);
}
Map<String,List<UserInfo>> result = list.stream().collect(Utils.groupByWithNullKeys(UserInfo::getName)):
输出如下
key value
李四 [{"personNo": "1234","name":"李四","age":19}]
张三 [{"personNo": "123","name":"张三","age":20},{"personNo": "123","name":"张三","age":21}]
3,取出list中某个字段最大值的记录
max
UserInfo userInfo = list.stream().max(Comparator.comparing(UserInfo::getAge)).get();
输出如下
{"personNo": "123","name":"张三","age":21}
4,根据某个字段倒序
sorted,默认升序,可通过reversed来变成降序
List<UserInfo> result = list.stream().sorted(Comparator.comparing(UserInfo::getNum).reversed()).collect(Collectors.toList());
输出如下:
[
{"personNo": "123","name":"张三","age":21},
{"personNo": "123","name":"张三","age":20},
{"personNo": "1234","name":"李四","age":19}
]
5,根据某个字段求和
mapToInt sum
int result = list.stream().mapToInt(UserInfo::getAge).sum();
输出如下
60
6,根据某个字段过滤
filter
List<UserInfo> result = list.stream().filter(u -> "李四".equals(u.getName())).collect(Collectors.toList());
输出如下:
{"personNo": "1234","name":"李四","age":19}
7,全字段去重
distinct count,全部字段值都一样才会去重,部分字段一样不会去重
int count = list.stream().distinct().count();
List<UserInfo> result = list.stream().distinct().collect(Collectors.toList());
输出如下
3
[
{"personNo": "123","name":"张三","age":21},
{"personNo": "123","name":"张三","age":20},
{"personNo": "1234","name":"李四","age":19}
]