PS:向公众号发送关键字可以搜索文章哦!

使用集合的流式API

直接上代码了,常用api都有了,要点都在注释中

苹果类:

packagejava8.stream;/***@authorqiang.xie*@date2017/5/4*/public classApple {

private intweight;privateString color;privateString catalog;publicApple(intweight,String color,String catalog) {

this.weight= weight;this.color= color;this.catalog= catalog;}

public intgetWeight() {

returnweight;}

public voidsetWeight(intweight) {

this.weight= weight;}

publicString getColor() {

returncolor;}

public voidsetColor(String color) {

this.color= color;}

publicString getCatalog() {

returncatalog;}

public voidsetCatalog(String catalog) {

this.catalog= catalog;}

//以颜色和品类决定两个苹果是否一样@Overridepublic booleanequals(Object o) {

if(this== o) return true;if(o == null|| getClass() != o.getClass()) return false;Apple apple = (Apple) o;if(color!= null? !color.equals(apple.color) : apple.color!= null) return false;returncatalog!= null? catalog.equals(apple.catalog) : apple.catalog== null;}

@Overridepublic inthashCode() {

intresult = color!= null? color.hashCode() : 0;result = 31* result + (catalog!= null? catalog.hashCode() : 0);returnresult;}

@OverridepublicString toString() {

return"重量:"+weight+",颜色:"+color+",品类:"+catalog;}

}

测试类:

packagejava8.stream;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.stream.Collectors;/***@authorqiang.xie*@date2017/5/4*/public classStreamApiTest {

public static voidmain(String[] arg) {

List apples = newArrayList<>();apples.add(newApple(1,"red","红富士"));apples.add(newApple(3,"red","红富士"));apples.add(newApple(2,"red","山东苹果"));apples.add(newApple(4,"red","山东苹果"));apples.add(newApple(5,"green","红富士"));apples.add(newApple(7,"green","红富士"));apples.add(newApple(6,"green","山东苹果"));apples.add(newApple(8,"green","山东苹果"));//filter 筛选符合条件的数据并返回一个新的流//collect将流中的数据收集List reds=apples.stream().filter(apple -> apple.getColor().equals("red")).collect(Collectors.toList());System.out.println(reds);//distinct 去重(根据对象的equals和hashcode方法比较两个对象是否是同一个对象)List distincts=apples.stream().distinct().collect(Collectors.toList());System.out.println(distincts);//限制结果集的大小List limits=apples.stream().limit(1).collect(Collectors.toList());System.out.println(limits);//跳过元素个数,结合limit可以实现类似数据库的分页List skips=apples.stream().skip(6).collect(Collectors.toList());System.out.println(skips);//映射,将流中的每个元素变成映射成另一个元素,注意,所有流操作都是在一个新的流中处理,原始流中的数据都不会改变List colors=apples.stream().map(apple -> apple.getColor()).collect(Collectors.toList());//从apple中提取颜色System.out.println(colors);//将流中的元素扁平化//anyMatch是否存在满足条件的苹果System.out.println(apples.stream().anyMatch(apple -> apple.getWeight()==2));//allMatch所有元素是否都满足条件System.out.println(apples.stream().allMatch(apple -> apple.getWeight()==2));//noneMatch是否所有元素都不满足条件System.out.println(apples.stream().noneMatch(apple -> apple.getWeight()==2));//findAny从流中查找任意一个元素,通常结合filter一起用System.out.println(apples.stream().findAny().get());//findFirst从流中查找第一个元素,通常结合filter一起用System.out.println(apples.stream().filter(apple -> apple.getWeight()>1).findFirst().get());//count统计流中的元素个数System.out.println("count:"+apples.stream().count());//reduce 将流中所有元素反复结合起来,得到一个值。可以用累加来帮助理解reduce操作//累加1-100intsum=0;List numbers= Arrays.asList(1,2,3,4,5,6,7);for(inti : numbers){

sum+=i;}

System.out.println("sum:"+sum);//用reduce实现累加System.out.println("reduce sum:"+numbers.stream().reduce(0,(a,b)->a+b));//用reduce查找最大值System.out.println("max:"+numbers.stream().reduce(0,(a,b)-> a>=b ? a : b));//Interge中提供了静态的sum和max方法,代码可以进一步简化System.out.println("reduce sum:"+numbers.stream().reduce(0,Integer::sum));/*基本类型数组流.上面代码计算总和的方式包含了一个自动的从int转成Integer的操作,Java 8引入了三个原始类型特化流接口来解决这个问题:IntStream、 DoubleStream 和LongStream,分别将流中的元素特化为 int 、 long 和 double ,从而避免了暗含的装箱成本。将流转换为特化版本的常用方法是 mapToInt 、 mapToDouble 和 mapToLong 。这些方法和前面说的 map 方法的工作方式一样,只是它们返回的是一个特定类型的流,而不是 Stream,此外它们多了一些直接的运算方法,如sum()*/System.out.println("mapToInt sum:"+apples.stream().mapToInt(Apple::getWeight).sum());//所有返回流的方法都可以随意组合使用//计算weight>1并且颜色是red的所有苹果的总重量System.out.println("weight:"+apples.stream().filter(apple -> apple.getWeight()>1).filter(apple -> apple.getColor().equals("red")).map(apple -> apple.getWeight()).reduce(0,Integer::sum));}

}

运行结果:

[重量:1,颜色:red,品类:红富士, 重量:3,颜色:red,品类:红富士, 重量:2,颜色:red,品类:山东苹果, 重量:4,颜色:red,品类:山东苹果]

[重量:1,颜色:red,品类:红富士, 重量:2,颜色:red,品类:山东苹果, 重量:5,颜色:green,品类:红富士, 重量:6,颜色:green,品类:山东苹果]

[重量:1,颜色:red,品类:红富士]

[重量:6,颜色:green,品类:山东苹果, 重量:8,颜色:green,品类:山东苹果]

[red, red, red, red, green, green, green, green]

true

false

false

重量:1,颜色:red,品类:红富士

重量:3,颜色:red,品类:红富士

count:8

sum:28

reduce sum:28

max:7

reduce sum:28

mapToInt sum:36

weight:9

@不迷失|知识改善生活

微信公众号:java技术

专注技术研究与视频教学,分享有价值的技术与经验,关注程序员的发展!

@不迷失教学视频

推荐阅读

java 流常用接口_java 8新特性5--使用集合流式API相关推荐

  1. java stream api 对象复制_Java 8新特性之旅:使用Stream API处理集合

    在这篇"Java 8新特性教程"系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章"遍历.过 ...

  2. java字符串去重复_Java 8新特性:字符串去重

    本文首发与InfoQ. 8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新.支持在运行时通过API来修改MinHeapFreeRatio和MaxHe ...

  3. java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!

    原标题:java异常处理,重新认识java异常,java7异常处理的新特性! 在程序中,错误可能产生于程序员没有预料的各种情况,或者是超出了程序员可控范围的环境因素,如用户的坏数据.试图打开一个根本不 ...

  4. Java 9 中的9个新特性

    转载自 强悍!Java 9 中的9个新特性 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它的更新. 这里有九个令人兴奋的新功能将与 Java 9 一起发布. Java 平台级模 ...

  5. Java番外篇2——jdk8新特性

    Java番外篇2--jdk8新特性 1.Lambda 1.1.无参无返回值 public class Test {interface Print{void print();}public static ...

  6. Java 9 中的 9 个新特性

    Java 9 中的 9 个新特性 Java 8 发布三年多之后,已经于在2017年9月21日发布了. 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它的更新. 这里有九个令人兴奋 ...

  7. 深圳Java培训学习:Java8.0新特性之Lambda表达式--【千锋】

    深圳Java培训学习:Java8.0新特性之Lambda表达式–[千锋] 前言 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.本篇文章,主要给大家介绍的是lambda表 ...

  8. JAVA中常用接口的介绍及使用示例 java lang Comparable

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JAVA ...

  9. SharePoint 2010新特性文档集

    SharePoint 2010新特性文档集 SharePoint 2010文档管理新加了 document set(文档集)的概念,文档集相当于一个增强版的文件夹,它有自己的homepage, 在其中 ...

最新文章

  1. (转) 使用Speech SDK 5.1文字转音频
  2. jquery颜色转换html,jQuery颜色选取器插件COLPICK
  3. SEO那些事:一句代码一键分享网站
  4. (Mybatis)复杂查询
  5. Go 开发关键技术指南 | 敢问路在何方?(内含超全知识大图)
  6. hdu 5179(bfs打表+二分)
  7. P2371-[国家集训队]墨墨的等式【同余最短路】
  8. 阿帕奇跨域_阿帕奇齿轮泵
  9. linux先安装svn server
  10. 自动挡轿车等红灯时,是挂D挡踩刹车好还是挂N挡好呢?
  11. android audio 音量设置分析
  12. 计算机组成原理课后习题答案(第五版白中英)
  13. pcdj dex 3破解版激活教程
  14. wi7计算机桌面删除,win7系统删除桌面右键多余选项
  15. gif一键抠图 在线_一款支持智能抠图、钢笔抠图的在线抠图工具上线了 速抠图 sukoutu.com...
  16. 父母生命末期,是在医院昂贵痛苦地治疗,还是接老人回家亲情陪伴
  17. 计算机主板提示ahci,电脑BIOS没有AHCI功能没有办法BIOS刷新怎么办
  18. 计算机考研英语听力,英语听力_2017考研常识:计算机考研必知_沪江英语
  19. 腾讯企业邮箱单点登录 php,新版QQ企业邮箱接口PHP SDK
  20. Linux中的管道与连接符号

热门文章

  1. Golang map 三板斧第一式:快速上手
  2. Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件
  3. windows mysql导入sql文件
  4. shell 脚本的使用
  5. spring security oauth2.0 实现
  6. 【HNOI2004】L语言
  7. c#解压文件的实例方法
  8. 【转载】ubuntu换源
  9. Quartz2D简单绘制之饼状图
  10. Base64编码对照表