Java stream的常见用法
不讲原理,只说用法。
1,集合遍历
public class StreamTest {
public static void main(String[] args) {
//1 遍历
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
//使用lambda表达式输出list中的每个值
list.forEach(c->{
System.out.println(c);
});
//调用方法
list.forEach(StreamTest::showList);
}
public static void showList(String value) {
System.out.println(value);
}
}
2,筛选集合
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("absc");
list.add("bbb"); List<String> selectResult = list.stream().filter(value->{
return value.startsWith("a");
}).collect(Collectors.toList());
4,筛选并去重
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("aaa");
list.add("absc");
list.add("bbb"); List<String> selectResult = list.stream().filter(value->{
return value.startsWith("a");
}).distinct().collect(Collectors.toList());
5,截断流 取出结果的前n个元素
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("aaa");
list.add("absc");
list.add("bbb"); List<String> selectResult = list.stream().filter(value->{
return value.startsWith("a");
}).limit(3).collect(Collectors.toList());
6,跳过元素,它和limit是互补的
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("aaa");
list.add("absc");
list.add("bbb"); List<String> selectResult = list.stream().filter(value->{
return value.startsWith("a");
}).skip(3).collect(Collectors.toList());
7,映射,对集合的每个元素操作,比如获取背包中所有物品的数量
List<Long> countList = role.getBag().getBagMap().values().stream().map(BagItem::getCount).collect(Collectors.toList());
8,集合流操作 ,例如 找到玩家背包中道具数据大于5的前3个道具id
Role role = new Role();
List<String> result = role.getBag().getBagMap().values().
stream().filter(item -> item.getCount() > 5).map(BagItem::getItemId).
limit(3).collect(Collectors.toList());
其中,filter是过滤,map是遍历所有项,并返回一个值,limit是取三个结果,collect是收集并返回。只有在collect时才执行计算代码。
9,流的扁平化 flatmap
它可以把几个相同类型的流合并成一个新的流。比如,获取List<String>集合中,各个字符串的字母集合,并去重。
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("aaa");
list.add("absc");
list.add("bbb"); List<String> selectResult = list.stream().map(v->v.split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());
输出结果
[a, b, s, c]
10,匹配判断
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("aaa");
list.add("absc");
list.add("bbb");
//是否所有的项都是以a开头
boolean result = list.stream().allMatch(c->{
return c.startsWith("a");
});
System.out.println(result);
//是否有任何一项是否以a开头
result = list.stream().anyMatch(c->{
return c.startsWith("a");
});
//是否都不以a开头
result = list.stream().noneMatch(c->{
return c.startsWith("a");
});
这就是对应Java中的&& ,||

11,list转map
//转map
List<Role> roles = new ArrayList<>();
Map<String, Role> map = roles.stream().collect(Collectors.toMap(Role::getRid, role-> role));
12,排序
List<Student> studentList=Arrays.asList(new Student(1,"ziwen1",10),new Student(2,"aiwen2",18),new Student(3,"biwen3",28)); List<Student> studentList1=studentList.stream().sorted().collect(Collectors.toList());//自然序列 List<Student> studentList2=studentList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());//逆序 List<Student> studentList3=studentList.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());//根据年龄自然顺序 List<Student> studentList4=studentList.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());//根据年龄逆序
13,求最值
PlayerHero hero1 = new PlayerHero();
hero1.setHeroInfoId("1");
hero1.setCombat(70); PlayerHero hero2 = new PlayerHero();
hero2.setHeroInfoId("2");
hero2.setCombat(20);
PlayerHero hero3 = new PlayerHero();
hero3.setHeroInfoId("3");
hero3.setCombat(50); String id = Stream.of(hero2,hero3,hero1).max(Comparator.comparing(PlayerHero::getCombat)).get().getHeroInfoId();
System.out.println(id);
14 ,求和
int totalCalories = menu.stream().collect(summingInt(Dish::getCalories));
欢迎加群交流,QQ群:66728073,197321069,398808948 还可以扫描博客左上角二维码,关注游戏技术网公众号
Java stream的常见用法的更多相关文章
- 讲透JAVA Stream的collect用法与原理,远比你想象的更强大
大家好,又见面了. 在我前面的文章<吃透JAVA的Stream流操作,多年实践总结>中呢,对Stream的整体情况进行了细致全面的讲解,也大概介绍了下结果收集器Collectors的常见用 ...
- Java反射的常见用法
反射的常见用法有三类,第一类是“查看”,比如输入某个类的属性方法等信息,第二类是“装载“,比如装载指定的类到内存里,第三类是“调用”,比如通过传入参数,调用指定的方法. 1 查看属性的修饰符.类型和名 ...
- Java jar命令 常见用法
一.jar命令作用: 进行打包 -- 把多个文件打包成一个压缩包 -- 这个压缩包和Winzip的压缩格式是一样的. 区别在于jar压缩的文件默认多一个META-INF的文件夹,该文件夹下包含一个Ma ...
- collections在java中的常见用法
1. 工具类collections用于操作集合类,如List,Set,常用方法有: 1) 排序(Sort) 使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序.列表中的所有元素都必须实现 ...
- java位运算符常见用法
1. 判断int型变量a是奇数还是偶数 a&1 = 0 偶数 a&1 = 1 奇数 2. 求平均值,比如有两个int类型变量x.y,首先要求x+y的和,再除以2,但是有可能x+y的结果 ...
- Java Stream函数式编程第三篇:管道流结果处理
一.Java Stream管道数据处理操作 在本号之前写过的文章中,曾经给大家介绍过 Java Stream管道流是用于简化集合类元素处理的java API.在使用的过程中分为三个阶段.在开始本文之前 ...
- 【转】Java 枚举7常见种用法
原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu 原创地址:http://blog.li ...
- JAVA中enum的常见用法
JAVA中enum的常见用法包括:定义并添加方法.switch.遍历.EnumSet.EnumMap 1.定义enum并添加或覆盖方法 public Interface Behaviour{ void ...
- java stream中Collectors的用法
目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collectors ...
随机推荐
- Python 30分钟快速入门指南
学习地址 中文版:Python 30分钟入门指南 英文版:Learn X in Y minutes 学习时间 2019/03/10 19:00 - 19:32,多用了2分钟.
- 安装Visual C++ 6.0后报错:应用程序无法正常启动(0xc0000142)
最近在安装Visual C++ 6.0时,本来想用个中文版的,结果刚安装好就报了这个错误 百度后发现是由于汉化后的Visual C++ 6.0与win10不兼容造成的 解决办法就是替换程序,把中文版的 ...
- Phone List 字典树 OR STL
Phone List Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 140 Solved: 35 Description ...
- [LeetCode] Serialize and Deserialize N-ary Tree N叉搜索树的序列化和去序列化
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- Jmeter响应数据中文乱码
在用Jmeter测试的时候吸纳供应数据如果出现中文乱码解决方法: 1.如下图在Content encoding输入框内输入 UTF-8
- [math] 什么是双曲函数(转发)
我完全不记得上高中的时候学习过双曲函数...额,暴露了... 原文地址:https://zhuanlan.zhihu.com/p/20042215 可能是最好的讲解双曲函数的文章 零.写在前面 (近期 ...
- [strongswan] strongswan METHOD宏
使用METHOD宏的函数定义: METHOD(message_t, get_message_id, uint32_t, private_message_t *this) { return this-& ...
- VUE组件间数据方法的传递,初步了解
父组件的数据传递到子组件: 子组件:(其中fMsg是要从父组件传递过来的数据,注意fMsg要在子组件props里先定义) 父组件:(使用v-bind,将自身数据绑定给中转属性fMsg,从而通过 子组件 ...
- 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...
- 关于Eureka客户端连接服务端报错问题Cannot execute request on any known server
对于Eureka包这个错误问题:Cannot execute request on any known server,总的原因就是连接Eureka连接服务端的Url地址不对,Url地址不对很很多情况. ...