已知以下集合,请完成以下功能
List<User> ps = Arrays.asList(
    new User(1, "张三", 31, 1000),
    new User(2, "李四", 26, 12000),
    new User(3, "王五", 18, 8000),
    new User(4, "赵六", 21, 3000),
    new User(5, "钱七", 45, 31000),
    new User(6, "老八", 16, 10000),
    new User(7, "老九", 23, 30000),
    new User(8, "小七", 31, 9000)
);

//对应实体类:
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private Integer salary;
   //getter,setter,有参无参,toString()
}
A.获取所有数据,过滤掉第一条和最后一条
B.获取薪水最高的用户信息
C.获取年龄最大的两个用户的姓名

D..获取年龄最大的两个用户的 姓

package User05;import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;// 测试类
public class UserTest {public static void main(String[] args) {//创建一个集合对象List<User> ps = Arrays.asList( // 讲学生类的数组 转成 集合new User(1, "张三", 31, 1000),new User(2, "李四", 26, 12000),new User(3, "王五", 18, 8000),new User(4, "赵六", 21, 3000),new User(5, "钱七", 45, 31000),new User(6, "老八", 16, 10000),new User(7, "老九", 23, 30000),new User(8, "小七", 31, 9000));// 将集合转换成成流// A.获取所有数据,过滤掉第一条和最后一条Stream<User> s = ps.stream();ps.stream().skip(1).limit((ps.size())-2).forEach(System.out::println);//B.获取薪水最高的 用户信息   // 第一种方式ps.stream().sorted((s1,s2) -> s2.getSalary() - s1.getSalary()).limit(1).forEach(System.out::println);// 第二种方式Optional<User> collect = ps.stream().collect(Collectors.maxBy(Comparator.comparing(User::getSalary))) ;System.out.println("薪水最高的用户信息:"+collect);//C.获取年龄最大的两个用户的 姓 // 第一种方式/*ps.stream().sorted(new Comparator<User>() {//先进行排序再进行获取每个用户的名字的首字母@Overridepublic int compare(User o1, User o2) {// TODO Auto-generated method stubreturn o2.getAge() - o1.getAge();// 排序}}).map(new Function<User, String>() { //T是User类(因为要利用User类进行调用get/set方法),返回值类型是String类型@Overridepublic String apply(User t) {// String substring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。 return t.getName().substring(0,1);//获取字符串中的第一个字符// 有个问题就是有两个一样的年纪的人怎么办 小七也是第2大的}}).limit(2).forEach(System.out::println);*/// lambda表达式进行简化ps.stream().sorted((o1, o2) -> o2.getAge() - o1.getAge()).map( t -> t.getName().substring(0,1)).limit(2).forEach(System.out::println);// 第二种方式就是没用匿名内部类改用调用Comparator的comparing方法而已ps.stream().sorted(Comparator.comparing(User::getAge)).map( t -> t.getName().substring(0,1)).skip(ps.size()-2).limit(2).forEach(System.out::println);             }
}
// 用户类
//定义一个用户类class User {//成员变量private Integer id;private String name;private Integer age;private Integer salary;//构造方法public User() {// TODO Auto-generated constructor stub}public User(Integer id, String name, Integer age, Integer salary) {super();this.id = id;this.name = name;this.age = age;this.salary = salary;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSalary() {return salary;}public void setSalary(Integer salary) {this.salary = salary;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + "]";}
}

Lambda表达式和方法引用综合案例(获取年龄最大的两个用户的 姓)相关推荐

  1. JAVA学习笔记 15 - 函数式接口、Lambda表达式和方法引用

    本文是Java基础课程的第十五课.主要介绍在JDK8中,Java引入的部分新特性,包括函数式接口.Lambda表达式和方法引用.这些新特性使得Java能够在按照面向对象思想进行开发的基础上,融合函数式 ...

  2. Java8 之 lambda 表达式、方法引用、函数式接口、默认方式、静态方法

    今天我来聊聊 Java8 的一些新的特性,确实 Java8 的新特性的出现,给开发者带来了非常大的便利,可能刚刚开始的时候会有点不习惯的这种写法,但是,当你真正的熟悉了之后,你一定会爱上这些新的特性的 ...

  3. 【Java从入门到头秃专栏 7】语法篇(六) :Lambda表达式(->) 方法引用(::) stream流

    目录 1 Lambda表达式( -> ) ​ 2 方法引用( :: ) 3 Stream流 接下来介绍的三种语法叫:Lambda表达式 方法引用 stream流,这三种语法的使用要有特定条件,在 ...

  4. lambda表达式与方法引用

    lambda 表达式 λ 属于匿名函数代码,使用箭头操作符 -> 左边是参数列表,右边是方法体 (参数类型 参数,···) -> {代码块}即使没有参数,也要提供空括号,就像是无参方法一样 ...

  5. 如何在Java 8中将Lambda表达式转换为方法引用?

    如果您使用Java 8进行编码,那么您会知道使用方法引用代替lambda表达式会使您的代码更具可读性,因此建议尽可能使用方法引用替换lambda表达式,但是,最大的问题是,您如何查找是否可以用方法引用 ...

  6. lambda表达式和方法引用

    参考: 1 2 什么是lambda表达式 lambda意为λ,表示是一个函数,而一个函数只有唯一的输入输出映射,因此引出lambda表达式的定义 Lambda是一个唯一匿名方法 一个接口,如果只有一个 ...

  7. 【Java 进阶】匿名类(代码传递、回调、过滤器)、Lambda表达式(方法引用)、函数式接口(Supplier、Consumer、Predicate、Function)

    匿名类 匿名类(Anonymous Class) 匿名类的使用注意 匿名类 - 代码传递 - 测试代码运行时间的工具类 匿名类 - 回调 - 简易网络请求 匿名类 - 过滤器 - 获取目录下的所有文件 ...

  8. java8新特性之lambda表达式(及方法引用与构造器引用)

    Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中).使用 Lambda 表达式可以使代码变的更加简洁紧凑. 一.语法 lambda 表达式的语法格式如下: (parameters) ...

  9. jdk8新特性(接口新特性、lambda表达式、方法引用、函数式接口、Stream流)和单例设计模式

    1.单例设计模式 1.概念: 设计模式:使用固有的流程或方式设计出来的类接口.枚举等元素 2.设计原则: 1.私有化构造方法[private.protected] 2.类中创建最终对象[唯一不能被赋值 ...

最新文章

  1. 几种典型磁铁表面的磁感应强度的变化
  2. 在多线程 Python 程序中实现多目标不同缩进格式的 logging
  3. 在Linux上安装PostgreSQL
  4. Android下添加新的自定义键值和按键处理流程【转】
  5. 前端学习(2680):注意看位置 少加注释
  6. superagent返回结果乱码
  7. 使用npm失败解决方案
  8. Linux经常使用命令(八) - touch
  9. 【Linux】linux和Mac下命令vmstat
  10. 使用csscan评测字符集改变
  11. MySQL错误ERROR 1786 (HY000)解决
  12. 微信Java SDK开发文档
  13. 北京簋街 美食完全攻略 + 簋街好吃的夜宵去处-----店铺介绍大全
  14. 经纬度转换器_FME应用小实例:线面经纬度集合快速转几何图形
  15. 对泊松分布的一点理解
  16. JavaScript - canvas - 画直角坐标系
  17. 853. 有边数限制的最短路(bellman_ford算法)
  18. [raspberry]树莓派无线鼠标延迟问题
  19. UE4地形简单材质球制作,及地形变黑处理办法
  20. 名悦集团:春节小长假后汽车保养该怎么做

热门文章

  1. java基础周报_java第四周周报
  2. 台式计算机是移动设备吗,超台式电脑!手机成中国第一大上网终端
  3. set的用法及短语_set的用法总结大全
  4. 关联性——相关性分析
  5. (R语言)从文件中读取数据
  6. STM32CubeIDE配置使用
  7. LaTex特殊字符和符号
  8. 安卓实战:自定义软键盘 (2)
  9. 一个DIV的芝士汉堡制作
  10. cannon的英文名_卡农的作者是谁啊 此曲的赏析 英文名cannon不是大炮吗