1.写在前面

关于Stream API的内容,已经基本上说完了。大家可以参考我的这两篇文章:

Stream API的创建方式及中间操作、Stream API的终止操作

那么这篇文章主要就是说一个Stream API的简单应用练习题。


2.应用举例

首先,我们需要创建一个交易员类、交易类、存储这两个类对象的List集合。

package com.szh.java8.exer;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** 交易员类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Trader {private String name;private String city;}
package com.szh.java8.exer;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** 交易类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Transaction {private Trader trader;private int year;private int value;}
    List<Transaction> transactions = Arrays.asList(new Transaction(new Trader("Brian", "Cambridge"),2011,300),new Transaction(new Trader("Raoul", "Cambridge"),2012,1000),new Transaction(new Trader("Raoul", "Cambridge"),2011, 400),new Transaction(new Trader("Mario", "Milan"),2012, 710),new Transaction(new Trader("Mario", "Milan"),2012, 700),new Transaction(new Trader("Alan", "Cambridge"),2012,950));

2.1 找出2011年发生的所有交易, 并按交易额排序(从低到高)

    @Testpublic void test1() {transactions.stream().filter((t) -> t.getYear() == 2011).sorted((t1,t2) -> Integer.compare(t1.getValue(),t2.getValue())).forEach(System.out::println);}

2.2 交易员都在哪些不同的城市工作过?

    @Testpublic void test2() {transactions.stream().map((t) -> t.getTrader().getCity()).distinct().forEach(System.out::println);}

2.3 查找所有来自剑桥的交易员,并按姓名排序

    @Testpublic void test3() {transactions.stream().filter((t) -> t.getTrader().getCity().equals("Cambridge")).map(Transaction::getTrader).sorted((t1,t2) -> t1.getName().compareTo(t2.getName())).distinct().forEach(System.out::println);}

2.4 返回所有交易员的姓名字符串,按字母顺序排序

    @Testpublic void test4() {transactions.stream().map((t) -> t.getTrader().getName()).sorted().forEach(System.out::println);}

2.5 有没有交易员是在米兰工作的?

    @Testpublic void test5() {boolean b = transactions.stream().anyMatch((t) -> t.getTrader().getCity().equals("Milan"));System.out.println(b);}

2.6 打印生活在剑桥的交易员的所有交易额

    @Testpublic void test6() {Optional<Integer> sum = transactions.stream().filter((t) -> t.getTrader().getCity().equals("Cambridge")).map(Transaction::getValue).reduce(Integer::sum);System.out.println(sum.get());
//        Integer reduce = transactions.stream()
//                .filter((t) -> t.getTrader().getCity().equals("Cambridge"))
//                .map(Transaction::getValue)
//                .reduce(0, (x, y) -> x + y);
//        System.out.println(reduce);}

2.7 所有交易中,最高的交易额是多少

    @Testpublic void test7() {Optional<Integer> max = transactions.stream().map((t) -> t.getValue()).max(Integer::compare);System.out.println(max.get());}

2.8 找到交易额最小的交易

    @Testpublic void test8() {Optional<Transaction> min = transactions.stream().min((t1, t2) -> Integer.compare(t1.getValue(), t2.getValue()));System.out.println(min.get());}

Java8新特性——Stream API的简单应用相关推荐

  1. Java8新特性Stream API与Lambda表达式详解(1)

    2019独角兽企业重金招聘Python工程师标准>>> http://blog.csdn.net/caihuangshi/article/details/51298622 转载于:h ...

  2. List 集合去重方式与 java8新特性stream去重

    以下介绍五种 - 不同的方法去除 Java 中 ArrayList 中的重复数据 1.使用 LinkedHashSet 删除 arraylist 中的重复数据 LinkedHashSet 是在一个 A ...

  3. Java8新特性Stream流详解

    陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油. 本文是介绍Java8新特性Stream流常用方法超详细教学 说 ...

  4. java8新特性-stream对map集合进行过滤的方法

    java8新特性-stream对map集合进行过滤的方法 stream对map集合进行过滤的方法

  5. java8新特性-Stream入门学习

    上一篇介绍了Lambda的学习,如果对Lambda表达式还不清晰的同学可以戳一下这个链接:java8新特性-lambda表达式入门学习.java8除了提供了Lambda表达式,操作集合的Stream ...

  6. java8新特性stream流

    参考自深蓝至尊的Java8 新特性之流式数据处理 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式 ...

  7. 【Stream】java8新特性Stream流总结

    一.什么是stream 在 java8 中增加了一个新的抽象接口 Stream API,使用 Stream 操作集合类似于使用 SQL 语句数据库查找数据类似,提供直观的方法进行操作. Stream ...

  8. java8新特性-stream学习

    java8除了提供了Lambda表达式,操作集合的Stream API也是新特性中最值得学习和掌握的,它大大简化了,我们操作数据集合的代码量的书写.简单来说Stream是一个抽象概念,可以通过查找,过 ...

  9. 夯实基础,Java8新特性Stream详细教程

    1 基本特性 Java8的API中添加了一个新的特性: 流,即stream.stream是将数组或者集合的元素视为流,流在管道中流动过程中,对数据进行筛选.排序和其他操作. 1.1 流的特性 stre ...

最新文章

  1. mysql-mybatis 8.0版本配置====解决could not create connection to database server.
  2. 国内NLP竞赛平台一览(附平台连接)
  3. JAVA实现可视化的xpath_Java学习之XPath
  4. Google Cloud Platform试用期变成只有一天
  5. Educational Codeforces Round 80 (Rated for Div. 2) C. Two Arrays 组合数|dp
  6. MaxComputeSql性能调优
  7. dexpress 流程图_DevExpress常用操作
  8. GAN论文阅读路线图,更快地通过大量阅读入门GAN
  9. 【LeetCode】【数组】题号:*498,对角线遍历
  10. HTTP下载文件到本地
  11. 使用YYLabel做文本竖向展示
  12. Windows下如何正确清理C盘?
  13. 码破苍穹:空指针的传说
  14. 计算器程序java开方运算_模拟计算器java程序
  15. 20个案例掌握PL/SQL 基础
  16. 赛宝-亿能软件测试技术沙龙第1期 – 性能测试工程师职业规划与成长之路
  17. 使用 redis 中的 lzf 压缩算法
  18. Python-- error: [WinError 3] 系统找不到指定的路径。: 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC
  19. html5 frog jump,frog-jump
  20. LVGL 8.2 meter控件实现模拟时钟

热门文章

  1. HTML+css3个人博客html源码
  2. 利用Swoft实现PHP+websocket直播,即时通讯代码
  3. 关于uni-app的资源热更新!!!
  4. 【滑动验证码 selenium】滑动验证码模拟滑动
  5. 天才少年稚晖君调戏机械臂。加上AI视觉,2小时学会抓螺母
  6. 深度估计中的不确定度方法总结
  7. 4 数字加密 (15分)——一维数组
  8. 通达OA2019数据库链接超时,应用中心报错的解决办法
  9. 计算机仿真的主要目的,数控加工仿真的主要目的是什么?
  10. jqweui的picker动态加载数据