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集合面试题的文章:大公司最 ...
随机推荐
- Hibernate 多对一关联查询
版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5598269.html 一.单向多对一和双向多对一的区别 如果只 ...
- 华为无线ap3010dn-agn刷成胖ap
刚买的华为ap3010dn-agn 版本为 v200R007C20SPC500 默认不带命令 ap-mode-switch [Huawei]dis version Huawei Versatile ...
- SQLyog之MySQL客户端的下载、安装和使用(普通版)
本博文的主要内容有 .SQLyog的下载 .SQLyog的安装 .SQLyog的使用 前期,安装这个,不多说 MySQL Server类型之MySQL客户端工具的下载.安装和使用 1.SQLyog的下 ...
- JavaScript正则表达式基础知识汇总
一.创建正则对象: 1.构造函数RegExp创建正则对象 var pattern = new RegExp('s$'); //pattern匹配以s结尾的字符串 2.使用正则直接量 var patte ...
- TypeScript 入门指南
你是否听过 TypeScript? TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行.TypeS ...
- PCIe学习笔记(15)--- TLP的ROUTING方式
PCIE是POINT TO POINT的,不像PCI,是SHARED-BUS,总线上的数据,是被所有EP DEV看到的. 这一点与USB2.0比较类似,是广播方式的(BROADCASTING) USB ...
- 谷歌上不去了,长久解决方式。能够稳定高速上Google和Gmail
稳定上Google的神器 国内Google很不稳定.速度慢且常常上不去,通过"我要上Google".能够安全稳定地使用Google.Gmail.Google+等平时须要特殊手段才干 ...
- 自己定义滑动删除item的ListView。
首先继承创建继承ListView和实现OnTouchListener,OnGestureListener的类. 会使用到AbsList中的pointToPosition(int x, int y)方法 ...
- 227. Mock Hanoi Tower by Stacks【easy】
In the classic problem of Towers of Hanoi, you have 3 towers and N disks of different sizes which ca ...
- 0050 MyBatis关联映射--一对多关系
一对多关系更加常见,比如用户和订单,一个用户可以有多个订单 DROP TABLE IF EXISTS customer; /*用户表*/ CREATE TABLE customer( `pk` INT ...