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. Mysql远程登录授权

    1.改表法. 请使用mysql管理工具,如:SQLyog Enterprise 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑使用mysql管理工 ...

  2. C#winform在textbox插入内容换行

    要让一个TextBox显示多行文本就得把它的Multiline属性设置为true,可是如果你是要把TextBox的Text属性设置多行文本时可能会遇到点麻烦,也许你会想到直接加一个换行符"\ ...

  3. dataGridView 如何默认选中第一行

    datagridview默认选中第一行方法: this.dataGridView1.Rows[0].Selected = true; datagridview 去除 默认选中第一行方法:在绑定data ...

  4. mysql 5.7压缩包安装笔记

    转载请注明出处http://www.cnblogs.com/havedream/p/5075263.html 重装系统之后准备安装mysql,看到官网上有mysql 5.7.10可以下载就点了,然后就 ...

  5. RequireJS和AMD规范

    目录 概述 define方法:定义模块 require方法:调用模块 AMD模式小结 配置require.js:config方法 插件 优化器r.js 参考链接 概述 RequireJS是一个工具库, ...

  6. LevelDB系列之Log文件

    上节内容讲到log文件在LevelDb中的主要作用是系统故障恢复时,能够保证不会丢失数据.因为在将记录写入内存的Memtable之前,会先写入Log文件,这样即使系统发生故障,Memtable中的数据 ...

  7. Laravel Controller中引入第三方类库

    Laravel 引入第三方类库 在Controller中引入自定义的php文件,先在app目录下创建一个新的文件夹,命名Tools(可自定义),接着创建一个MyTest.php: <?php c ...

  8. slidingmenu

        slidingmenu是一个开源组件.提供了左滑菜单和右滑菜单.下面是一个使用例子的工程源码.     在项目中不去管源码仅仅只是使用的话,主要需要实现的有3个类 MainActivity:这 ...

  9. android开源代码

    Android开源项目--分类汇总 转自:https://github.com/Trinea/android-open-project Android开源项目第一篇——个性化控件(View)篇 包括L ...

  10. [terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046

      SQL_TRACE/10046 事件是 Oracle 提供的用于进行 SQL 跟踪的手段,在日常的数据库问题诊断和解决中是非常常用的方法.但其生成的trace文件需要tkprof工具生成一个可供人 ...