1,首先定义Employee类。

package coffee.how.to.program.early.objects.chapter15;

public class Employee {

    private String firstName;
private String lastName;
private double salary;
private String department; // constructor
public Employee(String firstName, String lastName, double salary, String department) {
this.firstName = firstName;
this.lastName = lastName;
this.salary = salary;
this.department = department;
} // set firstName
public void setFirstName(String firstName) {
this.firstName = firstName;
} // get firstName
public String getFirstName() {
return firstName;
} // set lastName
public void setLastName(String lastName) {
this.lastName = lastName;
} // get lastName
public String getLastName() {
return lastName;
} // set salary
public void setSalary(double salary) {
this.salary = salary;
} // get salary
public double getSalary() {
return salary;
} // set department
public void setDepartment(String department) {
this.department = department;
} // get department
public String getDepartment() {
return department;
} // return Employee's first and last name combined
public String getName() {
return String.format("%s %s", getFirstName(), getLastName());
} // return a String containing the Employee's information
@Override
public String toString() {
return String.format("%-8s %-8s %8.2f %s", getFirstName(), getLastName(), getSalary(), getDepartment());
} // end method toString
} // end class Employee

2,对Employee类进行操作类。

package coffee.how.to.program.early.objects.chapter15;

/**
* 定义若干 Employee 实例并加入数组,
* 把数组转换成 list,
* 根据 Employee的Last Name 和 First Name 定义比较器。
* 使用 lambda 和 stream 对 Employee 类进行操作。
*/
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate; public class ProcessingEmployees { public static void main(String[] args) {
// 定义Employee类数组
Employee[] employees = {
new Employee("Jason", "Red", 5000, "IT"),
new Employee("Ashley", "Green", 7600, "IT"),
new Employee("Matthew", "Indigo", 3587.5, "Sales"),
new Employee("James", "Indigo", 4700.77, "Marketing"),
new Employee("Luke", "Indigo", 6200, "IT"),
new Employee("Jason", "Blue", 3200, "Sales"),
new Employee("Wendy", "Brown", 4236.4, "Marketing") }; // 转换成list
List<Employee> list = Arrays.asList(employees); // 打印全部的Employee信息
System.out.println("Complete Employee List: ");
list.stream().forEach(System.out::println); System.out.println("-------------------------------"); // 定义函数式接口,返回boolean值,指定工资范围在大于等于4000小于等于6000的区间。
Predicate<Employee> four2SixThousand = e -> (e.getSalary() >= 4000 && e.getSalary() <= 6000); // 使用 stream 过滤,排序,再循环遍历打印。
list.stream().filter(four2SixThousand).sorted(Comparator.comparing(Employee::getSalary))
.forEach(System.out::println); // 打印比较器区间工资最小的Employee信息
System.out.printf("%nFirst employee who earns $4000-$6000:%n%s%n",
list.stream().filter(four2SixThousand).min(Comparator.comparing(Employee::getSalary)).get()); Function<Employee, String> byFirstName = Employee::getFirstName;
Function<Employee, String> byLastName = Employee::getLastName;
// 指定比较器比较规则
Comparator<Employee> lastThenFistComp = Comparator.comparing(byLastName).thenComparing(byFirstName); // 先根据last name 比较,如果相同,再比较 first name。
System.out.printf("%nEmployees in ascending order by last name then fist name: %n");
list.stream().sorted(lastThenFistComp).forEach(System.out::println); //先根据first name 比较,如果相同,再比较 last name。
System.out.printf("%nEmployees in descending order by last name then first:%n");
list.stream().sorted(lastThenFistComp.reversed()).forEach(System.out::println);
}
}

使用Java 8 Lambda表达式对Employee类进行操作的更多相关文章

  1. java使用lambda表达式对List集合进行操作(JDK1.8)

    1. 使用lambda表达式对List集合进行操作(JDK1.) List<TreeDto> collect = list.stream().filter(item -> item. ...

  2. Effective Java 第三版——42.lambda表达式优于匿名类

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  3. Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】

    原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...

  4. 深入探索Java 8 Lambda表达式

    2014年3月,Java 8发布,Lambda表达式作为一项重要的特性随之而来.或许现在你已经在使用Lambda表达式来书写简洁灵活的代码.比如,你可以使用Lambda表达式和新增的流相关的API,完 ...

  5. 深入浅出 Java 8 Lambda 表达式

    摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...

  6. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

  7. Java中Lambda表达式的使用

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

  8. Java 8 Lambda 表达式

    Lambda 是啥玩意 简单来说,Lambda 就是一个匿名的方法,就这样,没啥特别的.它采用一种非常简洁的方式来定义方法.当你想传递可复用的方法片段时,匿名方法非常有用.例如,将一个方法传递给另外一 ...

  9. java 8 Lambda表达式(翻译自Stackoverflow)

    (原文链接)Lambda只能作用于一个只有一个抽象方法的函数式接口(Function Interface),不过函数式接口可以有任意数量default或static修饰的方法(因此,它们有时也被当做单 ...

随机推荐

  1. CSS3新增伪类

    p:last-of-type         选择其父元素的最后的一个P元素 p:last-child            选择其父元素的最后子元素(一定是P才行) p:first-of-type ...

  2. url 编码(percentcode 百分号编码)

    http://www.imkevinyang.com/2009/08/%E8%AF%A6%E8%A7%A3javascript%E4%B8%AD%E7%9A%84url%E7%BC%96%E8%A7% ...

  3. 两种会话状态之Session会话

    什么是Session 使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度. Session技 ...

  4. spring 知识梳理

    https://github.com/spring-projects/spring-framework  spring github地址

  5. Dalvik opcodes

    原文地址: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html Dalvik opcodes Author: Gabor Paller V ...

  6. C++primer 阅读点滴记录(一)

    第十三章 复制控制:(copy control) 复制构造函数(copy constructor) 复制操作符(assignment operator) ps: 什么时候需要显示的定义复制控制操作:类 ...

  7. 使用WIF实现单点登录Part II —— Windows Identity Foundation基本原理

    在上一篇文章中,我们已经使用WIF构建了一个基于MVC4的简单的身份验证程序,在这篇文章里,我们将探讨一下到底什么是WIF,以及它的工作原理.然后在下一篇文章开始,我们将实际操作,实现单点登录功能. ...

  8. MVC中Model,不仅仅只是数据的传递者

    在Model使用的时候很多人回向以前写三层架构一样使用它,将Model作为数据的传递者. 比如常见的写法 public int Id { get; set; } public int RoleId { ...

  9. ADOMD连接SSAS和Mondrian,rex的终结者

    前传 公司使用Mondrian作为OLAP服务器,于是,不得不适用Java开源的Rex进行客户端连接,用了一段时间,实在无法忍受rex的笨拙,于是乎,一直希望有一个工具能够连接替代它. 周末闲来无事, ...

  10. C 实现一个跨平台的定时器 论述

    引言 今天我们要讲述和构建的是一个跨平台多线程C的定时器对象,粒度是毫秒级别.可以称之为简易的timer, sctimer.h 库. 首先看总的接口,看门见客. sctimer.h #ifndef _ ...