关于JAVA8新特性,Lambda表达式的练习。

java8更新许久,但从来没有试验整理过。借公司空闲之际,练习一下Lambda表达式!

练习题目,均为网上寻找题目(原版地址找不到了)。

本文lambda学习主要参考博主葵花下的獾的文章,参考链接https://blog.csdn.net/qq_28410283/article/details/80634725(非常有用,lambda其他知识在文章下方均有链接)

基本用法:list.stream().map(s -> s + 1)  //映射.flatMap(s -> Stream.of(s)) //和map差不多,但返回类型为Stream,类似list.add()和list.addAll()的区别.filter(s -> s < 1000)    //过滤.limit(5)   //限制.skip(1)    //跳过.distinct() //去重.sorted()   //自然排序.sorted(Integer::compareTo) //自定义排序.reduce()   //对需要的值进行加工,一般方法有(max,min等)参考链接https://blog.csdn.net/zhang89xiao/article/details/77164866

准备类(交易数据的分析),

package pojo1;/**
*定义一个交易人员的类,添加必要属性(名字和城市)
*/public  class Trader{private String name;private String city;public Trader(String n, String c){this.name = n;this.city = c;}public String getName(){return this.name;}public String getCity(){return this.city;}public void setCity(String newCity){this.city = newCity;}public String toString(){return "pojo1.Trader:"+this.name + " in " + this.city;}
}
package pojo1;/**
*添加交易过程的类,添加属性(交易员,年限,交易额)
*
*/public class Transaction{private Trader trader;private int year;private int value;public Transaction(Trader trader, int year, int value){this.trader = trader;this.year = year;this.value = value;}public Trader getTrader(){return this.trader;}public int getYear(){return this.year;}public int getValue(){return this.value;}public String toString(){return "{" + this.trader + ", " +"year: "+this.year+", " +"value:" + this.value +"}";}
}

添加数据

        Trader raoul = new Trader("Raoul", "Cambridge");Trader mario = new Trader("Mario","Milan");Trader alan = new Trader("Alan","Cambridge");Trader brian = new Trader("Brian","Cambridge");List<Transaction> transactions = Arrays.asList(new Transaction(brian, 2011, 300),new Transaction(raoul, 2012, 1000),new Transaction(raoul, 2011, 400),new Transaction(mario, 2012, 710),new Transaction(mario, 2012, 700),new Transaction(alan, 2012, 950));

开始练习:

1.找出2011年发生的所有交易,并按交易额排序

思路:条件:年限为2011,需要排序。所有的集合用List存储。

List<Transaction> tr2001 = transaction.stream

.filter(transaction -> transaction.getYear() == 2011)    //筛选符合条件的

.sorted(comparing(Transaction::getValue))  //根据交易额排序

.collect(toList());        //集合

2.交易员在哪些不同的城市工作过

思路:结果为城市的集合

List<String> cityList = transaction.stream

.map(transaction -> transaction.getTrader().getCity())                  //取出所有的城市

.distinct()                            //去重

.collect(toList());                  //集合

3.查找所有来自剑桥的交易员,并按姓名进行排序!

思路:条件:城市为剑桥。结果:所有的交易员(集合)。进行排序。

List<Trader>  names = transactions.stream

.map(Transaction::Trader)                   //先取出所有的交易员

.filter(trader -> trader.getCity().equals("Cambridge"))       //条件:城市为剑桥

.distinct()           //去重

.sorted(comparing(Trader::getName))                 //根据名字排序

.collect(toList());                   //集合

4.返回所有交易员的姓名的字符串,并按字母顺序排序。

思路:结果:所有交易员的姓名(String),进行排序。

String traderNames = transaction.stream()

.map(transaction -> transaction.getTrader().getName())     //得到所有交易员的名字

.distinct()              //去重

.sorted()                //默认排序

.reduce("",(n1,n2) -> n1+n2+";");       //将字符串进行拼接(方法内一个参数为第一个默认字符串,不设置的话    //                     n1一般为第一个默认字符串。-> 后为操作)

5.有没有交易员在米兰工作的

思路:结果:Boolean。条件:城市为米兰的交易员

Boolean milanTrader = transaction.stream

.anyMatch(transaction ->trasaction.getTrader().getCity().equals("milan"))

/**Predicate的函数式接口,接口定义请看《JAVA8 Predicate接口》;

*anyMatch表示,判断的条件里,任意一个元素成功,返回true

*allMatch表示,判断条件里的元素,所有的都是,返回true

*noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true*/

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

思路:条件:生活在剑桥。结果:交易额

transaction.stream().filter(transaction -> transaction.getTrader().getCity().equals("Cambridge"))

.forEach(transaction -> System.out.println(transcation.getValue()));

7.所有交易中,最高的交易额是多少?

Optional<Integer> maxValue = transaction.stream

.map(Transaction::getValue)

.distinct()

.reduce(Interger::max);
注:可以用maxValue.isPresent()判断交易额是否存在。

8.找到交易额最小的交易

  • 写法1(使用自带的min方法)

Optional<Integer> minValue = transaction.stream()

.map(Trasaction::getValue)

.distinct()

.reduce(Integer::min);

  • 写法2(比较交易额,拿到最小的)

Optional<Integer> minValue = transaction.stream()

.map(Trasaction::getValue)

.distinct()

.reduce((t1,t2)->{

if(t1.intValue() > t2.intValue()) return t2.intValue();

else  return t1.intValue();

});

综上,八个方法练习。

java Lambda表达式练习相关推荐

  1. Java Lambda表达式入门

    本文转自:http://blog.csdn.net/renfufei... 转载请注明出处 原文链接: Start Using Java Lambda Expressions 下载示例程序 Examp ...

  2. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  3. Java Lambda表达式forEach无法跳出循环的解决思路

    Java Lambda表达式forEach无法跳出循环的解决思路 如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导 ...

  4. Java Lambda表达式初探

    前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用JDK7.对企业来说,技术上谨慎未 ...

  5. Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记

    Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...

  6. java lambda 表达式中的双冒号和箭头的用法 ::

    先构造一些数据,创建一个User类 java lambda 表达式中的双冒号的用法 :: 双冒号运算就是Java中的[方法引用],[方法引用]的格式是 类名::方法名 如下图所示 User是一个类, ...

  7. Lambda表达式的生动理解以及Java Lambda表达式常见使用场景

    本篇承接上一篇 Java Lambda 表达式快速学习 , 对Lambda 表达式的语法格式进行演化说明, 并对Java 中Lambda表达式的常见使用场景进行说明. Lambda 表达式怎么来的? ...

  8. Java Lambda 表达式快速学习

    Lambda 表达式来源于数学, 因为其简洁性,很多开发语言都支持, Java 在版本8 开始引入. Lamba 表达式是什么? 匿名内部类 接口只能有一个需要被实现的方法 Lamba 表达式作用 代 ...

  9. java lambda表达式 steam api

    java lambda表达式 steam api 案例使用 java版本为 jdk-17 foreach 遍历 public class JavaDemo03 {public static void ...

  10. 【外文翻译】外国友人写得很不错的Java Lambda表达式入门教程,我终于翻译好给大家啦!!!...

    " 英语原文的链接在最底下的"阅读原文" " 简介 (译者认为: 超过 3 行的逻辑就不适用 Lambda 表达式了.虽然看着很先进,其实 Lambda 表达式 ...

最新文章

  1. Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合
  2. 【学习笔记】自然数幂和
  3. Git / git clone 、git pull 和 git fetch
  4. kotlin使用spring data jpa(一)
  5. 接口实例(C#,IShape)【C#】
  6. Tempter of the Bone
  7. Linux的高效传输函数sendfile
  8. vs中未能找到list.cs_意甲7-29 03:45国际米兰vs那不勒斯,国际米兰主场十拿九稳
  9. android 图片处理器-包括反转、浮雕、锐化、轮廓提取功能
  10. sql优化常用的几种方法:19种最有效的sql优化技巧
  11. vivo手机进入9008模式(vivo x7测试)
  12. OpenOffice实现word文档在线预览
  13. 2022张宇考研基础30讲 第六讲 中值定理
  14. JavaCC详解 绝对干货
  15. macbook proa1708_苹果a1708是哪一年的
  16. ArcServer 9.3 ecp、 ArcSDE 9.3 ecp、 ArcIMS 9.3 ecp、 ArcEngine 9.3 ecp
  17. 为什么要配置数据源ODBC
  18. 管理学原理非常重要的知识点
  19. Linux——MySQL高可用-PXC架构
  20. 计算机学院毕业礼物,“风里雨里,我们在这里等你“计算机学院举行毕业礼物赠予仪式...

热门文章

  1. 自旋锁spin_lock和raw_spin_lock
  2. android刷步工具,位移精灵1.51(安卓10刷步数)
  3. 1.Hadoop入门
  4. BBR 加速比收敛讲解python示例
  5. jQuery Ajax异步请求详解
  6. 用IntelliJ IDEA开发Python
  7. 个人云电脑-推荐方案 - Parsec / Fastlink
  8. win7电脑远程桌面连接提示已停止工作,但电脑没有蓝牙,不是受蓝牙影响,且影响电脑卡顿必须重启故障模块名称:StackHash_e1f3
  9. 模版消息智能推送!我们教你发得更快更多更省
  10. HTML-jQuery入门