//transform 实现: List numList = Lists.transform(mapList, s -> Integer.valueOf(s.get("valueItem") + ""));
//还原:List> mapList =Lists.newArrayList();
Map map1 =Maps.newHashMap();
map1.put("nameItem", "香蕉");
map1.put("valueItem", 2);
mapList.add(map1);
Map map2 =Maps.newHashMap();
map2.put("nameItem", "香蕉");
map2.put("valueItem", 3);
mapList.add(map2);
Set set = new HashSet<>();
List value1 =mapList.stream()
.map(o->{
Optional option =o.entrySet().stream()
.findAny()//.findAny()获得是Optional,然后对Optional调用map方法获得的是Optional,而Optional里面的值为null,再调用orElse方法却不会出现问题
.filter(m -> m.getKey().equals("valueItem"))
.map(i->{
Object value2=i.getValue();returnvalue2;
})//.orElse("")//亦可以用orElse
;
option.ifPresent(r-> set.add(Integer.valueOf(r + "")));//存在则直接调用
returnoption.get();
}).collect(Collectors.toList());
System.out.println("-1->" + set); //2,3
System.out.println("-1->" +value1);
}
转自:https://blog.csdn.net/weixin_42201566/article/details/81513769
Lists.transform:能够轻松的从一种类型的list转换为另一种类型的list。
使用场景:
1、把一个List> 中的 所有map对应某个key的value值取出来 返回一个新的list
Map map =Maps.newHashMap();
map.put("1","test1");
map.put("2","test2");
Map map2 =Maps.newHashMap();
map2.put("1","test3");
map2.put("4","test2");
List> list2=Lists.newArrayList();
list2.add(map);
list2.add(map2);
List list3=Lists.transform(list2,s->s.get("1"));
list3.forEach(s-> System.out.println(s));
2、通常可以使用Lists.transform把对象list中的某个属性取出来 返回一个新的list:如下代码
public static voidmain(String[] args) {
List resultList=Lists.newArrayList(new Result(1,"test1"),new Result(2,"test2"),new Result(3,"test3"));//将一个list转化为另外一个list
List nameList=Lists.transform(resultList,tuple ->tuple.getNameStr());
nameList.forEach(s->System.out.println(s));
System.out.println("============");
resultList.forEach(result->{
result.setNameStr("reset");
});
nameList.forEach(s->System.out.println(s));
}classResult{privateInteger id;privateString nameStr;publicResult(Integer id, String nameStr) {this.id =id;this.nameStr =nameStr;
}publicInteger getId() {returnid;
}public voidsetId(Integer id) {this.id =id;
}publicString getNameStr() {returnnameStr;
}public voidsetNameStr(String nameStr) {this.nameStr =nameStr;
}
}
结果:
test1
test2
test3
============
reset
reset
reset
结论:
当Lists.transform()处理的list的值发生改变,那么Lists.transform()处理的结果也会发生改变