java8新增一种流式数据,让操作集合数据更简单方便。
定义基本对象:
public classPeo {privateString name;privateString id;publicPeo() {super();
}publicPeo(String name, String id) {super();this.name =name;this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicString getId() {returnid;
}public voidsetId(String id) {this.id =id;
}
}
1.toMap的使用
使用toMap方法将list集合转出对应的map
importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;public classStemap {public static voidmain(String[] args) {
List list = new ArrayList<>();
list.add(new Peo("a", "1"));
list.add(new Peo("b", "2"));
list.add(new Peo("c", "3"));
list.add(new Peo("d", "4"));
Map map = list.stream().collect(Collectors.toMap(Peo::getId, s ->s));
//获取单字段集合
List names = list.stream().map(e -> e.getName).collect(Collectors.toList());
map.keySet().forEach(s->{
System.out.println(s);
});
}
}
使用
Collectors.toMap方法将list转成Map,key = Id,value = Peo对象
注意key值不能有重复,如果有重复就会报错,为了解决这种问题,我们可以使用以下的写法:
Map map = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s1));
多加的一个方法(s1,s2)->s1,是指当遇到key值相同时,value使用已经添加的,忽略后面的对象,如果这么写(s1,s2)->s2,将会把后面的对象替换到map中,如下:
importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;public classStemap {public static voidmain(String[] args) {
List list = new ArrayList<>();
list.add(new Peo("a", "1"));/*list.add(new Peo("b", "2"));
list.add(new Peo("c", "3"));
list.add(new Peo("d", "4"));*/list.add(new Peo("e", "1"));
Map map1 = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s1));
System.out.println(map1.get("1").getName());
Map map2 = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s2));
System.out.println(map2.get("1").getName());/*map1.values().forEach(s->{
System.out.println(s);
});*/}
}
输出如下:
2.groupBy
importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;public classStemap {public static voidmain(String[] args) {
List list = new ArrayList<>();
list.add(new Peo("a", "1"));
list.add(new Peo("b", "2"));
list.add(new Peo("c", "3"));
list.add(new Peo("d", "4"));
list.add(new Peo("e", "1"));
Map> map1 =list.stream().collect(Collectors.groupingBy(Peo::getId));
System.out.println("map 数量:"+map1.size());
System.out.println("key = 1 数量:"+map1.get("1").size());
map1.get("1").forEach(p ->{
System.out.println(p.getName());
});/*map1.values().forEach(s->{
System.out.println(s);
});*/}
}
输出如下:
我们可以通过groupBy方法对list数据分组,指定分组的key。
3.filter
importjava.util.ArrayList;importjava.util.List;importjava.util.stream.Collectors;public classStemap {public static voidmain(String[] args) {
List list = new ArrayList<>();
list.add(new Peo("a", "1"));
list.add(new Peo("b", "2"));
list.add(new Peo("c", "3"));
list.add(new Peo("d", "4"));
list.add(new Peo("e", "1"));
list= list.stream().filter(peo -> "1".equals(peo.getId())).collect(Collectors.toList());;
list.forEach(p->{
System.out.println(p.getName());
});/*map1.values().forEach(s->{
System.out.println(s);
});*/}
}
输出:
可用通过filter过滤出满足一定条件的数据。
后续还有关于distinct、limit、skip、allMatch等等方法,后面继续补充