java集合 stream 相关用法(1)
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));
//获取单字段集合
List<String> 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<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操作
分组 Map<Integer, List<T>> group = List.stream().collect(Collectors.groupingBy(T::getField ...
- java集合的简单用法
typora-root-url: iamge [TOC] 1.集合接口 1.1将集合的接口与实现分离 与现代的数据结构类库的常见情况一样,Java集合类库也将接口(interface)与实现(im ...
- Java集合Stream类filter的使用
之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤.这篇文章使用同样是JDK1.8新加入的Stream中filter方法来实现同样的效果.并且在实际项目中 ...
- Java集合框架相关知识整理
1.常见的集合有哪些? Collection接口和Map接口是所有集合框架的父接口 Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap ...
- Java Arrays.sort相关用法与重载
Java Arrays.sort() Java中的数组排序函数, 头文件 import java.util.Arrays; 相关API Arrays.sort(arys[]) Arrays.sort( ...
- Java 集合的基本用法
package jaxpsax; import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; i ...
- Java集合源码分析(一)ArrayList
前言 在前面的学习集合中只是介绍了集合的相关用法,我们想要更深入的去了解集合那就要通过我们去分析它的源码来了解它.希望对集合有一个更进一步的理解! 既然是看源码那我们要怎么看一个类的源码呢?这里我推荐 ...
- Java集合面试题
1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1 ...
- 40个Java集合面试问题和答案
Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点.这里,我列出了一些关于Java集合的重要问题和答案. 另外,码农网之前也整理过一篇关于Java集合面试题的文章:大公司最 ...
随机推荐
- html+css+js实现科学计算器
代码地址如下:http://www.demodashi.com/demo/13751.html 项目描述 纯html+css+js实现一个科学计算器,支持平方开方指数对数等基本函数,支持键盘输入,有简 ...
- Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg')
前些日子装了个jdk7试了试,后来做项目需要换成jdk6,安装完jdk6,设置完环境变量后出现问题.运行java -version出现Error: could not open `C:\Program ...
- Codeigniter MongoDB扩展之使用Aggregate实现Sum方法
本篇文章由:http://xinpure.com/codeigniter-mongodb-extension-using-aggregate-sum-method/ Codeigniter Mongo ...
- FTP服务搭建与配置
FTP介绍 大企业用的基本都是自动化发布工具,会用GIT企业发布的版本上传到服务器, 使用vsftpd搭建ftp服务(上) http://blog.csdn.net/qq_26941173/artic ...
- HTTP Cache怎样计算Age
这里的Age指的是响应头Age.以下内容有部分翻译,也有部分自己的理解.欢迎讨论. 我们用now表示当前主机的当前时间,用request_time表示缓存发起请求的时间,用response_time表 ...
- mysql init_connect
init_connect 服务器为每个连接的客户端执行的字符串.字符串由一个或多个SQL语句组成.要想指定多个语句,用分号间隔开.例如,每个客户端开始时默认启用autocommit模式.没有全局服务器 ...
- 【Android界面实现】View Animation 使用介绍
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 我们能够使用view animation 动画系统来给View控件加入tween动画(下称& ...
- 点滴积累【JS】---JS小功能(列表页面隔行变色)
效果: 代码: <head runat="server"> <title></title> <script type="text ...
- 【LeetCode】Sort Colors 解题报告
[题目] Given an array with n objects colored red, white or blue, sort them so that objects of the same ...
- Bash编程的难点
Bash作为一个编程语言,有很多奇怪的表达字符,有时候会让人感到很费解,其实,只要我们弄清楚bash面临的问题 就能够理解为啥要这么搞了,举个例子: 1.比较字符串"ab"和&qu ...