java set和listap_java集合 stream 相关用法(1)

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);

});*/}

}

输出如下:

7f28bcc4f9b5ec83a1f4cc7642720bd4.png

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);

});*/}

}

输出如下:

ad0fb7a022821e5da4e4bd0406e763cb.png

我们可以通过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);

});*/}

}

输出:

193f3fa29784ff204b552874d709da79.png

可用通过filter过滤出满足一定条件的数据。

后续还有关于distinct、limit、skip、allMatch等等方法,后面继续补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值