使用Java 8 Lambda表达式对Employee类进行操作

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);
    }
}
时间: 2024-11-06 09:34:34

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

Java之Lambda表达式和Stream类简单例子

开心一笑 提出问题 java的lambda表达式和Stream如何使用??? 解决问题 Lambda表达式的语法 基本语法: (parameters) -> expression 或 (parameters) ->{ statements; } 看例子学习吧! 例一:定义一个AyPerson类,为之后的测试做准备. package com.evada.de; import java.util.Arrays; import java.util.List; class AyPerson{ priv

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

原文地址 en cn 下载 Demo Java? 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件要少得多.接口更改使得接口可以添加到现有接口中,同时又不会破坏与现有代码的兼容性.本文将了解这些更改是如何协同工作的. Java 8 的最大变化在于添加了对 lambda 表达式 的支持.Lambda 表达式是可按引用传递的代码块.类似于一些其他编程语言中的闭包:它们是实现某项功能的代码,可接受一个

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

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 42.lambda表达式优于匿名类 在Java 8中,添加了函数式接口,lambda表达式和方法引用,以便更容易地创建函数对象. Stream API随着其他语言的修改一同

Java 8 lambda表达式示例

例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码.我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类. 1 // Java 8之前: 2 new Thread(new Runnable() { 3 @Override 4 public void run() {

用Java 8 Lambda表达式实现设计模式:命令模式

链接:http://www.importnew.com/16789.html 在这篇博客里,我将说明如何在使用Java 8 Lambda表达式的函数式编程方式时实现命令设计模式.命令模式的目标是将请求封装成一个对象,从对客户端的不同类型请求,例如队列或日志请求参数化,并提供相应的操作.命令模式是一种通用编程方式,该方式基于运行时决策顺序来执行方法.模式的参与者如下: 命令 :声明用于执行操作的接口. 实体命令 :定义接收者对象和动作的绑定. 客户端 :创建实体命令实例并设置它的接收者. 调用者:

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

PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出.Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码.这样有时可读性更好,表达更清晰.在Java生态系统中,函数式表达与对面向对象的全面支持是个激动人心的进步.将进一步促进并行第三方库的发展,充分利用多核CPU.尽

Java 8 lambda表达式20180404

Java 8 lambda表达式示例 我个人对Java 8发布非常激动,尤其是lambda表达式和流API.越来越多的了解它们,我能写出更干净的代码.虽然一开始并不是这样.第一次看到用lambda表达式写出来的Java代码时,我对这种神秘的语法感到非常失望,认为它们把Java搞得不可读,但我错了.花了一天时间做了一些lambda表达式和流API示例的练习后,我开心的看到了更清晰的Java代码.这有点像学习泛型,第一次见的时候我很讨厌它.我甚至继续使用老版Java 1.4来处理集合,直到有一天,朋

Java的Lambda表达式

Java的Lambda表达式 1. 什么是Lambda表达式 简单的说,Lambda表达式就是匿名方法.Lambda表达式让程序员能够使用更加简洁的代码,但是同样也使代码的可读性比较差. Lambda表达式也叫做匿名方法或者闭包. 2. 和匿名内部类做对比 Lambda是匿名方法,这个时候我们会想想到匿名内部类,我们来回想一下匿名内部类的用法,比如下面的代码就是使用匿名内部类实现了一个线程. public class Test { public static void main(String[]

Java中Lambda表达式的使用

简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘.)Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块