一:List通过Stream转Map
Collectors.toMap(Map的key, Map的value)
出现重复key时会报错
解决方法:
Collectors.toMap(Map的key, Map的value, 出现重复值时取前面或后面的值)
1、List对象转Map
Map<String,String> result = datadictList.stream().collect(Collectors.toMap(UserInfo::getCode, UserInfo::getName, (key1, key2) -> key1));
2、List非对象转Map
//指定字段为key和value
Map<String, String> collect1 = maps.stream().collect(Collectors.toMap(item -> String.valueOf(item.get("code")), item -> String.valueOf(item.get("name")), (i1, i2) -> i1));
//指定字段为key
Map<String, String> collect1 = maps.stream().collect(Collectors.toMap(item -> String.valueOf(item.get("code")), item -> item, (i1, i2) -> i1));
二:List通过Stream分组
1、List对象分组
Map<String, List<UserInfo>> collect = list.stream().collect(Collectors.groupingBy(UserInfo::getCode));
2、List非对象分组
Map<String, List<Map>> collect = list.stream().collect(Collectors.groupingBy(e -> e.get("code").toString()));
3、List对象分组(转成有序Map)
TreeMap<String, List<UserInfo>> collect2 = list.stream().filter(a -> null != a).collect(Collectors.groupingBy(UserInfo::getCode, TreeMap::new, Collectors.toList()));
三:List通过Stream过滤
1、过滤掉对象不为空并且某个指定值不为空的数据
List<UserInfo> userList= list.stream().filter(a ->
null != a
&& StringUtils.isNotBlank(a.getCode())
&& StringUtils.isNotBlank(a.getName())
).collect(Collectors.toList());
四:List通过Stream汇总某个数据
1、汇总金额
BigDecimal totalScale = list.stream().map(UserInfo::getAmt).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
五:List通过Stream排序
.reversed()为降序,不加.reversed()为升序
1、List对象排序
List<UserInfo> list = infoList.stream().sorted(Comparator.comparing(UserInfo::getAge).reversed()).collect(Collectors.toList());
2、List非对象排序
value = value.stream().sorted(Comparator.comparing(
item -> (null == item || null == item.get("age") || "".equals(item.get("age"))) ? -1 : Integer.valueOf(item.get("age").toString())
)).collect(Collectors.toList());
2、List动态字段排序排序
sortordName - 排序字段名
sortordType -排序方式 0:升序 1:降序
list.stream().sorted((x, y) -> {
if (x.containsKey(sortordName) && y.containsKey(sortordName)) {
String value = x.getString(sortordName);
String value1 = y.getString(sortordName);
if (YssD.isNumber(value)) {
double valueX = Double.valueOf(value);
double valueY = Double.valueOf(value1);
if ("0".equals(sortordType)) {
return Double.compare(valueX,valueY);
} else {
return Double.compare(valueY,valueX);
}
} else {
if ("0".equals(sortordType)) {
return value.compareTo(value1);
} else {
return value1.compareTo(value);
}
}
}
return 0;
}).collect(Collectors.toList());
六:List通过Stream获取最大值最小值
1、获取最大值
max = list.stream().max(Comparator.comparing(UserInfo::getAge));
2、获取最小值
min = list.stream().min (Comparator.comparing(UserInfo::getAge));
七:List通过Stream通过下标截取数据
1、根据页数和每页数量截取当页数据
pageNum -每页多少条数据
pageSize -当前第几页
.skip - 从第几条数据开始
.limit - 到第几条数据结束
List<UserInfo> rowPage = rows.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
八:List通过Stream进行循环处理
1、需要返回值
List<JSONObject> collect = list.stream().filter(a -> null != a).map(obj -> {
obj .put("custName", "");
obj .put("custId", "");
return obj ;
}).collect(Collectors.toList());
2、不需要返回值
List<JSONObject> list1 = new ArrayList<>();
list.stream().forEach(item -> {
if(null != item.getAge){
list1.add(item );
}
});