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 流操作的更多相关文章

  1. JAVA8流操作

    * Stream 的三个操作步骤: * 1创建Stream * 2中间操作 * 3终止操作 package airycode_java8.nice6; import airycode_java8.ni ...

  2. java8 流操作 好文网址

    api 各方法详解(很不错!) http://blog.51cto.com/turnsole/2093185 api 各方法 简介: https://www.cnblogs.com/guguli/p/ ...

  3. 【java多线程】java8的流操作api和fork/join框架

    原文:https://blog.csdn.net/u011001723/article/details/52794455/ 一.测试一个案例,说明java8的流操作是并行操作 1.代码 package ...

  4. Java8中的流操作-基本使用&性能测试

    为获得更好的阅读体验,请访问原文:传送门 一.流(Stream)简介 流是 Java8 中 API 的新成员,它允许你以声明式的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).这有点儿 ...

  5. Java 8-Lambda表达式、方法引用、标准函数接口与流操作、管道操作之间的关系

    1.Lambda表达式与接口之间的关系 只要Lambda表达式的声明形式与接口相一致,在很多情况下都可以替换接口.见如下代码 Thread t1 = new Thread(new Runnable() ...

  6. 公子奇带你进入Java8流的世界(二)

    在上一篇中我们带领大家简单的了解流的概念及使用场景,本节我们就来好好的介绍流的常见用法. 一.筛选和切片 对于一串流,我们有时需要取出我们需要的流中某些元素,主要是通过谓词筛选.看代码: 首先定义一个 ...

  7. 侠说java8--Stream流操作学习笔记,都在这里了

    前言 首次接触到Stream的时候以为它是和InputStream.OutputStream这样的输入输出流的统称. 流和集合的前世今生 概念的差异 在开发中,我们使用最多的类库之一就是集合.集合是一 ...

  8. 全面吃透JAVA Stream流操作,让代码更加的优雅

    全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...

  9. Node学习笔记(一):stream流操作

    NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...

随机推荐

  1. Java 学习笔记 泛型

    泛型 上界匹配 ? extends Number 下界匹配 ? super Number getSimpleName 不包括包名 getName 会包括包名 常和反射联合使用,做框架 Type是一个标 ...

  2. linux 中rc是什么意思

    在Linux中,最为常用的缩略语也许是"rc" 它是"runcomm"的缩写――即名词"run command"(运行命令)的简写.rc&q ...

  3. vue2+webpack 移动生态 常用依赖

    1.脚手架:官方的vue-cli已经很方便了 2.路由:vue-router : https://router.vuejs.org/zh-cn/essentials/named-routes.html ...

  4. jstack 排查 java 进程占用大量 CPU 问题

    1. top 看看哪个进程是罪魁祸首 2.将这个进程的jstack dump 到一个文件里面,以备使用. jstack -l 25886 > /tmp/jstack.log # 如果报错,则加 ...

  5. 洛谷P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)

    题意 题目链接 Sol 打出暴力不难发现时间复杂度的瓶颈在于求\(\sum_{i = 1}^n i^k\) 老祖宗告诉我们,这东西是个\(k\)次多项式,插一插就行了 上面的是\(O(Tk^2)\)的 ...

  6. 洛谷P5205 【模板】多项式开根(多项式sqrt)

    题意 题目链接 Sol 这个就很没意思了 求个ln,然后系数除以2,然后exp回去. #include<bits/stdc++.h> #define Pair pair<int, i ...

  7. Python 捕捉traceback异常栈信息

    捕捉traceback异常栈信息   by:授客 QQ:1033553122 相关函数简介 sys.exc_info() 返回包含3个元素(type, value, traceback)的元组,提供关 ...

  8. 小程序实践(六):view内部组件排版

    涉及知识点: 1.垂直排列,水平排列 2.居中对齐 示例: 1.默认排版 , 一个父组件里面两个子view 显示效果: 2.先给父view设置一个高度和颜色值,用于看效果 3.实现水平排列和垂直排列的 ...

  9. Java的优先级任务队列的实践

    队列的基本理解 在说队列之前说两个名词:Task是任务,TaskExecutor是任务执行器 而我们今天要说的队列就完全符合某机构这个情况,队列在有Task进来的时候TaskExecutor就立刻开始 ...

  10. 解决Chrome与jQuery菜单兼容问题

    题外,Chrome最近在耗电量方面超过了Edge,不过内存占用还是高啊,开发时偶尔用用.这不,http://jqueryui.com/menu/的官方菜单都支持的不好,改改吧! 打开jquery-ui ...