java8 流操作
0 创建流
public void test1(){
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
Integer[] nums = new Integer[];
Stream<Integer> stream1 = Arrays.stream(nums);
Stream<Integer> stream2 = Stream.of(,,,,,);
Stream<Integer> stream3 = Stream.iterate(, (x) -> x + ).limit();
stream3.forEach(System.out::println);
Stream<Double> stream4 = Stream.generate(Math::random).limit();
stream4.forEach(System.out::println);
}
1 合并多个流
//合并多个流
private void merge() {
List<String> list = new ArrayList<String>();
list.add("I am a boy");
list.add("I love the girl");
list.add("But the girl loves another girl"); List<String> result = list.stream() //得到流
.map(line->line.split(" ")) //将每个元素转成String[]
.flatMap(Arrays::stream) //将每个String[] 转成流 ,并合并为一个大流
.distinct() //对元素去重
.collect(Collectors.toList()); //终止流得到集合
result.forEach(System.out::println); //打印
}
2 是否匹配任一元素
//是否匹配任一元素
private void anyMatch() { List<Person> persons = Arrays.asList(new Person("zhangsan", ),new Person("lisi", ));
boolean isHas = persons.stream().anyMatch(e -> e.getAge() == );
System.out.println("isHas : "+isHas);
}
3 是否所有元素都匹配
//是否所有元素都匹配
private void allMatch() { List<Person> persons = Arrays.asList(new Person("zhangsan", ),new Person("lisi", ));
boolean bool = persons.stream().allMatch(e -> e.getAge() == );
System.out.println("isHas : "+bool);
}
4 是否所有元素都不匹配
//是否所有元素都不匹配
private void noneMatch() { List<Person> persons = Arrays.asList(new Person("zhangsan", ),new Person("lisi", ));
boolean bool = persons.stream().noneMatch(e -> e.getAge() == );
System.out.println("isHas : "+bool);
}
5 新增容器Optional ,可以避免空指针异常
private void orElse() {
Optional<Integer> optional2 = Optional.ofNullable(null);
System.out.println( optional2.orElse());
}
6 归并 reduce
//归并
private void testReduce() {
List<Person> persons = Arrays.asList(new Person("zhangsan", ),new Person("lisi", ));
//reduce 不设置初始值
Optional<Integer> optional = persons.stream().map(e -> e.getAge()).reduce((a,b) -> a + b);
System.out.println(optional.get());
//reduce 设置初始值
Integer ageTotal = persons.stream().map(e -> e.getAge()).reduce(,(a,b) -> a + b);
System.out.println(ageTotal);
}
7 map filter等操作
private void commonTest() {
List<Integer> numbers = Arrays.asList(, , , , , , );
//forEach 遍历
numbers.stream().forEach(System.out::println);
//map 映射每个元素到对应的结果
List<Integer> squaresList = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList());
squaresList.stream().forEach(System.out::println);
//filter 过滤
List<Integer> filetrList = numbers.stream().filter(x -> x>).collect(Collectors.toList());
filetrList.stream().forEach(System.out::println);
//limit 截取多少个
numbers.stream().limit().forEach(System.out::println);
//sorted 排序
numbers.stream().sorted().forEach(System.out::println);
//summaryStatistics 统计
IntSummaryStatistics statistics = numbers.stream().mapToInt(x -> x).summaryStatistics();
System.out.println(statistics.getMax());
System.out.println(statistics.getMin());
}
8 收集器
//使用收集器
private void collector() { List<Person> persons = Arrays.asList(new Person("zhangsan", ),
new Person("lisi", ),new Person("wangwu", ),
new Person("zhaoliu", ),new Person("qianqi", ));
//统计个数
Long count = persons.stream().collect(Collectors.counting());
System.out.println(count); //计算最大值
Optional<Person> optional = persons.stream().collect(Collectors.maxBy(Comparator.comparingInt(Person::getAge)));
System.out.println(optional.get().getName()); //求和
Integer sum = persons.stream().collect(Collectors.summingInt(Person::getAge));
System.out.println(sum); //求平均值
Double average = persons.stream().collect(Collectors.averagingInt(Person::getAge));
System.out.println(average); //统计 最大值 , 最小值 , 平均值 , 和 , 个数
IntSummaryStatistics summary = persons.stream().collect(Collectors.summarizingInt(Person::getAge));
System.out.println(summary.getMax()); //连接字符串
String names = persons.stream().map(x -> x.getName()).collect(Collectors.joining(" | "));
System.out.println(names); //一般归约
Integer sumAge = persons.stream().collect(Collectors.reducing(, Person::getAge, (x , y) -> x + y ));
System.out.println(sumAge); //分组
Map<String, List<Person>> map = persons.stream().collect(Collectors.groupingBy((person) -> {
if(person.getAge() < ) {
return "small";
}else if(person.getAge() < ) {
return "middle";
}else {
return "larger";
}
}));
map.get("middle").forEach( x -> System.out.println(x.getName())); //分组并统计
Map<String, Long> map2 = persons.stream().collect(Collectors.groupingBy((person) -> {
if(person.getAge() < ) {
return "small";
}else if(person.getAge() < ) {
return "middle";
}else {
return "larger";
}
},
Collectors.counting()
));
map2.values().stream().forEach(System.out::println); //分区是分组的特殊情况
Map<Boolean, List<Person>> map3 = persons.stream().collect(Collectors.partitioningBy(x -> x.getAge() > ));
map3.get(false).forEach( x -> System.out.println(x.getName())); }
9 map 的使用,转换类型
//map 可以将一个类型的集合转变为其他类型的集合
public void testMap() {
List<Integer> foo = Arrays.asList(,,,,);
List<Score> scores = foo.stream().map(e -> new Score(e))
.collect(Collectors.toList());
}
class Score {
int value ;
Score(int value){
this.value = value;
}
}
10 对流的操作
skip
filter 从流中排除某些元素。
map
flatMap
limit 截断流,使其元素不超过给定数量。
sort 排序
distinct 筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素
allMatch——检查是否匹配所有元素
anyMatch——检查是否至少匹配一个元素
noneMatch——都不匹配或者stream为空时候,返回true
findFirst——返回第一个元素
findAny——返回当前流中的任意元素
count——返回流中元素的总个数
max——返回流中最大值
min——返回流中最小值
java8 流操作的更多相关文章
- JAVA8流操作
* Stream 的三个操作步骤: * 1创建Stream * 2中间操作 * 3终止操作 package airycode_java8.nice6; import airycode_java8.ni ...
- java8 流操作 好文网址
api 各方法详解(很不错!) http://blog.51cto.com/turnsole/2093185 api 各方法 简介: https://www.cnblogs.com/guguli/p/ ...
- 【java多线程】java8的流操作api和fork/join框架
原文:https://blog.csdn.net/u011001723/article/details/52794455/ 一.测试一个案例,说明java8的流操作是并行操作 1.代码 package ...
- Java8中的流操作-基本使用&性能测试
为获得更好的阅读体验,请访问原文:传送门 一.流(Stream)简介 流是 Java8 中 API 的新成员,它允许你以声明式的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).这有点儿 ...
- Java 8-Lambda表达式、方法引用、标准函数接口与流操作、管道操作之间的关系
1.Lambda表达式与接口之间的关系 只要Lambda表达式的声明形式与接口相一致,在很多情况下都可以替换接口.见如下代码 Thread t1 = new Thread(new Runnable() ...
- 公子奇带你进入Java8流的世界(二)
在上一篇中我们带领大家简单的了解流的概念及使用场景,本节我们就来好好的介绍流的常见用法. 一.筛选和切片 对于一串流,我们有时需要取出我们需要的流中某些元素,主要是通过谓词筛选.看代码: 首先定义一个 ...
- 侠说java8--Stream流操作学习笔记,都在这里了
前言 首次接触到Stream的时候以为它是和InputStream.OutputStream这样的输入输出流的统称. 流和集合的前世今生 概念的差异 在开发中,我们使用最多的类库之一就是集合.集合是一 ...
- 全面吃透JAVA Stream流操作,让代码更加的优雅
全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...
- Node学习笔记(一):stream流操作
NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...
随机推荐
- mybatis_04 resultType和resultMap区别
resultType 使用resultType进行结果映射时,查询的列名和映射的pojo属性名完全一致,该列才能映射成功. 如果查询的列名和映射的pojo属性名全部不一致,则不会创建pojo对象: 如 ...
- 持续集成 自动化构建、测试、部署您的Coding代码
持续集成(Continuous Integration)指的是,频繁地(一天多次)将代码集成到主干. 持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量. 它的核心措施是,代码集成到主干之前, ...
- Javascript动态引用CSS文件的2种方法介绍
最近做一个项目,需要javascript动态插入样式,结果以前的方法失效了!查了2个小时的原因竟然是自己手贱,这个最后再说! javascript插入样式在前端开发中应用比较广泛,特别是在修改前端表现 ...
- 2018-09-24 Java源码英翻中网页演示
在线演示地址: 源代码翻译 两部分如下. 独立的Java代码翻译库 续前文代码翻译尝试-使用Roaster解析和生成Java源码 源码库: program-in-chinese/java_code_t ...
- [Objective-C]编程艺术 笔记整理
看了<禅与 Objective-C 编程艺术>,发现不少平时不注意的或注意但没有系统总结的东西,特此记录一下. 这次没有整理完,后续更新会结合手里的一些其他资料整理. 新博客wossone ...
- MVC框架与三层架构
MVC框架 介绍: MVC全名Model View Controller Model:模型的意思,代表业务模型 View:视图的意思,代表用户界面 Controller:控制器的意思,控制器接受用户的 ...
- 使用VSTS的Git进行版本控制(三)——评审历史记录
使用VSTS的Git进行版本控制(三)--评审历史记录 Git使用存储在每个提交中的父引用信息来管理开发的完整历史记录.评审该提交历史记录,能够找出文件更改的时间,并确定代码版本之间的差异. Git使 ...
- HBase最佳实践之Scan
一.简介 HBase中Scan从大的层面来看主要有三种常见用法:ScanAPI.TableScanMR以及SnapshotScanMR.三种用法的原理不尽相同,扫描效率当然相差甚远,最重要的是这几种用 ...
- [20181130]如何猜测那些值存在hash冲突.txt
[20181130]如何猜测那些值存在hash冲突.txt --//今年6月份开始kerrycode的1个帖子提到子查询结果缓存在哈希表中情况:--//链接:http://www.cnblogs.co ...
- Oracle EBS compile PLD PLL files.
PLL->PLX:frmcmp_batch module_type=library userid=apps/apps module=$1.pll output_file=$1.plx compi ...