一、Stream之filter、distinct、skip:

 package com.cy.java8;

 import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; public class StreamFilter { public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7, 7, 8); //取出偶数
List<Integer> result = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
System.out.println(result); //去重
List<Integer> result1 = list.stream().distinct().collect(Collectors.toList());
System.out.println(result1); //跳过前面的5个元素
List<Integer> result2 = list.stream().skip(5).collect(Collectors.toList());
System.out.println(result2); //只要前面的5个
List<Integer> result3 = list.stream().limit(5).collect(Collectors.toList());
System.out.println(result3);
}
}

打印结果:

[2, 4, 6, 6, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[6, 6, 7, 7, 8]
[1, 2, 3, 4, 5]

二、Stream之map、flatMap:  

 package com.cy.java8;

 import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class StreamMap { public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7, 7, 8); //list集合中每个数放大两倍
List<Integer> result1 = list.stream().map(i -> i * 2).collect(Collectors.toList());
System.out.println(result1); //只返回Dish中的name
List<String> result2 = listDish().stream().map(d -> d.getName()).collect(Collectors.toList());
System.out.println(result2); /**
* 需求:将Hello和World单词中重复的字母去掉
* flatmap flat(扁平化)
*/
String[] words = {"Hello", "World"};
//{H,e,l,l,o}, {W,o,r,l,d}
Stream<String[]> stream = Arrays.stream(words).map(w -> w.split("")); //Stream<String[]>
//H,e,l,l,o,W,o,r,l,d
Stream<String> stringStream = stream.flatMap(Arrays::stream);
List<String> result3 = stringStream.distinct().collect(Collectors.toList());
System.out.println(result3);
} private static List<Dish> listDish(){
List<Dish> menu = Arrays.asList(
new Dish("pork", false, 800, Dish.Type.MEAT),
new Dish("beef", false, 700, Dish.Type.MEAT),
new Dish("chicken", false, 400, Dish.Type.MEAT),
new Dish("french fries", true, 530, Dish.Type.OTHER),
new Dish("rice", true, 350, Dish.Type.OTHER),
new Dish("season fruit", true, 120, Dish.Type.OTHER),
new Dish("pizza", true, 550, Dish.Type.OTHER),
new Dish("prawns", false, 300, Dish.Type.FISH),
new Dish("salmon", false, 450, Dish.Type.FISH));
return menu;
}
}

打印结果:

[2, 4, 6, 8, 10, 12, 12, 14, 14, 16]
[pork, beef, chicken, french fries, rice, season fruit, pizza, prawns, salmon]
[H, e, l, o, W, r, d]

三、stream之match、find、reduce:

match:anyMatch、noneMatch、allMatch

 package com.cy.java8;

 import java.util.Arrays;
import java.util.stream.Stream; public class StreamMatch { public static void main(String[] args) {
Stream<Integer> s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7}); //s中是否所有元素都大于0
boolean b = s.allMatch(i -> i > 0);
System.out.println(b);               //true //只要有一个元素大于6就返回true
s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7});
boolean b2 = s.anyMatch(i -> i>6);
System.out.println(b2);              //true //没有一个元素满足小于1
s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7});
boolean b3 = s.noneMatch(i -> i<0);
System.out.println(b3);              //true
}
}

find:

 package com.cy.java8;

 import java.util.Arrays;
import java.util.Optional;
import java.util.stream.Stream; public class StreamFind { public static void main(String[] args) {
Stream<Integer> s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7}); //过滤出偶数之后,随便返回一个
Optional<Integer> optional1 = s.filter(i -> i % 2 == 0).findAny();
System.out.println(optional1.get()); //过滤出大于100的数,任意返回一个,如果有值正常返回,没值返回-1
s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7});
Optional<Integer> optional2 = s.filter(i -> i > 100).findAny();
System.out.println(optional2.orElse(-1)); //过滤出偶数,找到第一个,如果存在就打印
s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7});
Optional<Integer> optional3 = s.filter(i -> i % 2 == 0).findFirst();
optional3.ifPresent(System.out::println);
}
}

打印:

2
-1
2

reduce:

 package com.cy.java8;

 import java.util.Arrays;
import java.util.Optional;
import java.util.stream.Stream; public class StreamReduce { public static void main(String[] args) {
//reduce: 聚合的作用
Stream<Integer> s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5}); //求和,初始值设置为0
Integer result = s.reduce(0, (i, j) -> i + j);
System.out.println(result); //求最大值
s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5});
s.reduce((i, j) -> i > j ? i : j).ifPresent(System.out::println); s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5});
s.reduce(Integer::max).ifPresent(System.out::println); //只对里面的偶数进行相乘,计算结果
s = Arrays.stream(new Integer[]{1, 2, 3, 4, 5});
Integer result2 = s.filter(i -> i % 2 == 0).reduce(1, (i, j) -> i * j);
Optional.of(result2).ifPresent(System.out::println);
}
}

打印:

15
5
5
8

-----

Stream之filter、distinct、skip、map、flatMap、match、find、reduce的更多相关文章

  1. java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)

    使用filter 根据 条件筛选 出结果:例如 找出 user 中 age >=15 的用户 package lambda.stream; /** * @author 作者:cb * @vers ...

  2. RxJava【过滤】操作符 filter distinct throttle take skip first MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. Spark 学习笔记之 map/flatMap/filter/mapPartitions/mapPartitionsWithIndex/sample

    map/flatMap/filter/mapPartitions/mapPartitionsWithIndex/sample:

  4. RxJava【变换】操作符 map flatMap concatMap buffer MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. Python【day 14】sorted函数、filter函数和map函数的区别

    sorted函数.filter函数和map函数的区别1.作用 前者用于排序, 中者用于筛选, 后者用于返回值(不是特定的筛选或者排序)2.写法 前者 sorted(iterable,key=自定义函数 ...

  6. SELECT DISTINCT ON expressions must match initial ORDER BY expressions

    开发说pg中执行sql报错,发来消息让帮看看: SELECT DISTINCT ON expressions must match initial ORDER BY expressions 详细语句如 ...

  7. Java集合Stream类filter的使用

    之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤.这篇文章使用同样是JDK1.8新加入的Stream中filter方法来实现同样的效果.并且在实际项目中 ...

  8. JavaScript 中 map、foreach、reduce 间的区别

    一直对map.foreach.reduce这些函数很是生疏,今天看underscorejs时好好研究了一下,一研究我就更懵了,这不是一样嘛,都是遍历,所以我就去知乎找了一下,整理出了比较好的几个说法. ...

  9. hadoop 多表join:Map side join及Reduce side join范例

    最近在准备抽取数据的工作.有一个id集合200多M,要从另一个500GB的数据集合中抽取出所有id集合中包含的数据集.id数据集合中每一个行就是一个id的字符串(Reduce side join要在每 ...

随机推荐

  1. 程序员称为高手的10条心得(摘自http://www.jizhuomi.com/software/394.html)

    在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer).经 ...

  2. java.lang.Integer 类(JDK1.7)

    1.Integer 和int 的区别 ①.Integer 是 int 包装类,int 是八大基本数据类型之一(byte,char,short,int,long,float,double,boolean ...

  3. 删除表A的记录时,Oracle 报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录

    1.找到以”FKXXX“为外键的表A的子表,直接运行select a.constraint_name, a.table_name, b.constraint_name from user_constr ...

  4. 推荐几个天气Api接口 (可在小程序中使用)

    国内的地图软件基本是支持查询天气的唯独腾讯地图不支持天气查询,当然其他天气平台提供的接口也是够个人使用的 1.高德地图(高德地图开发者平台)支持获取实时天气数据 2.百度地图(百度地图开放平台)支持获 ...

  5. mysql笔记——索引

    什么是索引? 数据库中的一个对象. 在数据库中用来加速表的查询. 通过使用快速路径访问方法定位数据,减少了磁盘的i/o. 与表分别独立存放,但不能独立存在,必须属于某个表. 由数据库自动维护,表被删除 ...

  6. java<T>泛型

    泛型 1.泛型的概述 在JDK1.5之前,把对象放入到集合中,集合不会记住元素的类型,取出时,全都变成Object类型.泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr ...

  7. iOS消息通知Notification的用法

    1.发送消息 NSNotification *notification = [NSNotification notificationWithName:@"selectPosition&quo ...

  8. JAVA笔记14-线程

    一.概念 线程:是一个程序里面不同的执行路径,每一个分支都叫线程.到现在为止我们所讲的程序分支只有一个,即main方法,称作主线程. 进程:class文件,exe文件.程序的执行过程:程序放入代码区( ...

  9. NOIP2016提高A组五校联考3总结

    第一题,本来一开始就想到了数位dp,结果脑残地打了十几个转移方程,总是调试不出来,一气之下放弃了. 调第一题几乎调了整节比赛,第二第三都没它. 第二题连边找联通块. 第三题题解都打了三页,看都不想看. ...

  10. lazarus for win32 serviceApp

    procedure TMyThread.Execute; begin //Application.EventLog.FileName:='d:\xx.txt'; //Application.Event ...