java集合 stream 相关用法(1)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java集合 stream 相关用法(1),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3348字,纯文字阅读大概需要5分钟。
内容图文
![java集合 stream 相关用法(1)](/upload/InfoBanner/zyjiaocheng/837/3b975c16010e44e4b21ec1e20f49cba6.jpg)
java8新增一种流式数据,让操作集合数据更简单方便。
定义基本对象:
public class Peo { private String name; private String id; public Peo() { super(); } public Peo(String name, String id) { super(); this.name = name; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
1.toMap的使用
使用toMap方法将list集合转出对应的map
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Stemap { public static void main(String[] args) { List<Peo> 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<String, Peo> map = list.stream().collect(Collectors.toMap(Peo::getId, s -> s)); map.keySet().forEach(s->{ System.out.println(s); }); } }
使用
Collectors.toMap方法将list转成Map,key = Id,value = Peo对象
注意key值不能有重复,如果有重复就会报错,为了解决这种问题,我们可以使用以下的写法:
Map<String, Peo> map = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s1));
多加的一个方法(s1,s2)->s1,是指当遇到key值相同时,value使用已经添加的,忽略后面的对象,如果这么写(s1,s2)->s2,将会把后面的对象替换到map中,如下:
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Stemap { public static void main(String[] args) { List<Peo> 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<String, Peo> map1 = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s1)); System.out.println(map1.get("1").getName()); Map<String, Peo> 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
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Stemap { public static void main(String[] args) { List<Peo> 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<String, List<Peo>> 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
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class Stemap { public static void main(String[] args) { List<Peo> 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等等方法,后面继续补充
内容总结
以上是互联网集市为您收集整理的java集合 stream 相关用法(1)全部内容,希望文章能够帮你解决java集合 stream 相关用法(1)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。