转载请标明出处:https://blog.youkuaiyun.com/men_ma/article/details/106847165.
本文出自 不怕报错 就怕不报错的小猿猿 的博客
(jdk8--->新特性一lambda表达式)jdk8的简介+数字排序和数据集合的排序方式案例(学了之后贼简单,轻轻松松做好排序)
目标
开发工具:eclipse
首先我们先来新建一个项目
1.案例一:数字排序(出现jdk8之前与出现jdk8之后)
可能有人问有疑惑,我们为什么要学习jdk8?现在博主通过一个案例来讲解(数字排序)
在jdk8没有出现之前,我们是这样排序的,如下:
// jdk8出现之前的数字排序方式
@Test
public void test1() {
// 倒序排序
Comparator<Integer> c=new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return -Integer.compare(o1, o2);
}
};
// 没有Comparator时,这时是顺序排序
Set<Integer> set=new TreeSet<>(c);
set.add(2);
set.add(6);
set.add(9);
set.add(3);
set.add(7);
set.add(5);
System.out.println(set);
}
利用junit单元测试结果:
顺序排序:
倒序排序:
在jdk8出现之后,我们是这样排序的,利用jdk8常用的lambda表达式如下:
// jdk8出现之后
@Test
public void test2() {
// jdk8常用的lambda表达式
Set<Integer> set=new TreeSet<>((x,y)->-Integer.compare(x, y));
set.add(2);
set.add(6);
set.add(9);
set.add(3);
set.add(7);
set.add(5);
System.out.println(set);
}
测试结果:
看到这里是不是感觉jdk8的功能能让我们开发的程序员能够快速的开发呢
2.案例二:获取公司中员工工资大于6000的员工信息及获取公司中员工年龄大于40的员工信息
首先我们先来建一个实体类Employee:
为减少代码量,省略的get/set方法及构造方法和tostring方法
package com.java5678.jdk8;
public class Employee {
private String name;
private int age;
private float salary;
}
刚刚那个简单的数字排序大家可能不能直观的感受到jdk8的强大之处,现在我们再来个案例来进行对比,如下:
2、获取公司中员工工资大于6000的员工信息
3、获取公司中员工年龄大于40的员工信息
我们先搞一些初始化数据:
List<Employee> employees;
@Before
public void before() {
employees = Arrays.asList(new Employee("zhangsan",22,8888.8f),
new Employee("lisi",44,6666.6f),
new Employee("wangwu",55,4444.4f),
new Employee("maliu",11,1111.1f),
new Employee("tianqi",77,7777.7f),
new Employee("wangba",33 ,3333.3f),
new Employee("zhaojiu",99,5656.7f),
new Employee("huoying",56,8787.6f));
}
在没有学jdk8时,我们是这样做的:
// 2、获取公司中员工工资大于6000的员工信息
private List<Employee> filterList1(List<Employee> employees){
List<Employee> list = new ArrayList<>();
for (Employee employee : employees) {
if(employee.getSalary() > 6000) {
list.add(employee);
}
}
return list;
}
// 3、获取公司中员工年龄大于40的员工信息
private List<Employee> filterList2(List<Employee> employees){
List<Employee> list = new ArrayList<>();
for (Employee employee : employees) {
if(employee.getAge() > 40) {
list.add(employee);
}
}
return list;
}
// 3、获取公司中员工年龄大于60的员工信息
private List<Employee> filterList3(List<Employee> employees){
List<Employee> list = new ArrayList<>();
for (Employee employee : employees) {
if(employee.getAge() > 40) {
list.add(employee);
}
}
return list;
}
测试代码:
// jdk8出现之前的数据集合的排序方式
@Test
public void test3() {
List<Employee> filterList1 = filterList1(employees);
for (Employee employee : filterList1) {
System.out.println(employee);
}
System.out.println("----------------");
List<Employee> filterList2 = filterList2(employees);
for (Employee employee : filterList1) {
System.out.println(employee);
}
}
测试结果:
如上所述的这两个案例排序,你会发现有很多的重复代码,他们唯一不同的地方是if的条件语句不一样,现在我们来看看jdk8是怎么做的,贼简单,lets go
首先我们来定义一个MyPredicate接口,这个接口是jdk8内置的,后面我们会学的:
package com.java5678.jdk8;
public interface MyPredicate<T> {
public boolean test(T t);
}
这时有人会有疑问了,我们定义这个接口有什么用呢?我们还是根据上面的需求完成同样的功能
//创建一个调研性方法,为测试代码做前铺
private List<Employee> filterList(List<Employee> employees, MyPredicate<Employee> mp){
List<Employee> list = new ArrayList<>();
for (Employee employee : employees) {
if(mp.test(employee)) {
list.add(employee);
}
}
return list;
}
测试代码:
// jdk8出现之后的数据集合的排序方式
@Test
public void test4() {
// 获取公司中员工工资大于6000的员工信息
List<Employee> filterList1 = filterList(employees,(e)->e.getSalary()>6000);
for (Employee employee : filterList1) {
System.out.println(employee);
}
// 3、获取公司中员工年龄大于40的员工信息
System.out.println("----------------");
List<Employee> filterList2 = filterList(employees,(e)->e.getAge()>40);
for (Employee employee : filterList2) {
System.out.println(employee);
}
// 3、获取公司中员工年龄大于60的员工信息
System.out.println("----------------");
List<Employee> filterList3 = filterList(employees,(e)->e.getAge()>60);
for (Employee employee : filterList3) {
System.out.println(employee);
}
}
测试结果:
如上所述的案例合并为一个Demo.java类:
package com.java5678.jdk8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Before;
import org.junit.Test;
/**
* 为什么要学习jdk8
* @author zjjt
*
*/
public class Demo1 {
List<Employee> employees;
@Before
public void before() {
employees = Arrays.asList(new Employee("zhangsan",22,8888.8f),
new Employee("lisi",44,6666.6f),
new Employee("wangwu",55,4444.4f),
new Employee("maliu",11,1111.1f),
new Employee("tianqi",77,7777.7f),
new Employee("wangba",33 ,3333.3f),
new Employee("zhaojiu",99,5656.7f),
new Employee("huoying",56,8787.6f));
}
// jdk8出现之前的数字排序方式
@Test
public void test1() {
// 倒序排序
Comparator<Integer> c=new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return -Integer.compare(o1, o2);
}
};
// 没有Comparator时,这时时顺序排序
Set<Integer> set=new TreeSet<>(c);
set.add(2);
set.add(6);
set.add(9);
set.add(3);
set.add(7);
set.add(5);
System.out.println(set);
}
// jdk8出现之后
@Test
public void test2() {
// jdk8常用的lambda表达式
Set<Integer> set=new TreeSet<>((x,y)->-Integer.compare(x, y));
set.add(2);
set.add(6);
set.add(9);
set.add(3);
set.add(7);
set.add(5);
System.out.println(set);
}
// 2、获取公司中员工工资大于6000的员工信息
private List<Employee> filterList1(List<Employee> employees){
List<Employee> list = new ArrayList<>();
for (Employee employee : employees) {
if(employee.getSalary() > 6000) {
list.add(employee);
}
}
return list;
}
// 3、获取公司中员工年龄大于40的员工信息
private List<Employee> filterList2(List<Employee> employees){
List<Employee> list = new ArrayList<>();
for (Employee employee : employees) {
if(employee.getAge() > 40) {
list.add(employee);
}
}
return list;
}
// 3、获取公司中员工年龄大于60的员工信息
private List<Employee> filterList3(List<Employee> employees){
List<Employee> list = new ArrayList<>();
for (Employee employee : employees) {
if(employee.getAge() > 40) {
list.add(employee);
}
}
return list;
}
// jdk8出现之前的数据集合的排序方式
@Test
public void test3() {
List<Employee> filterList1 = filterList1(employees);
for (Employee employee : filterList1) {
System.out.println(employee);
}
System.out.println("----------------");
List<Employee> filterList2 = filterList2(employees);
for (Employee employee : filterList1) {
System.out.println(employee);
}
}
private List<Employee> filterList(List<Employee> employees, MyPredicate<Employee> mp){
List<Employee> list = new ArrayList<>();
for (Employee employee : employees) {
if(mp.test(employee)) {
list.add(employee);
}
}
return list;
}
// jdk8出现之后的数据集合的排序方式
@Test
public void test4() {
// 获取公司中员工工资大于6000的员工信息
List<Employee> filterList1 = filterList(employees,(e)->e.getSalary()>6000);
for (Employee employee : filterList1) {
System.out.println(employee);
}
// 3、获取公司中员工年龄大于40的员工信息
System.out.println("----------------");
List<Employee> filterList2 = filterList(employees,(e)->e.getAge()>40);
for (Employee employee : filterList2) {
System.out.println(employee);
}
// 3、获取公司中员工年龄大于60的员工信息
System.out.println("----------------");
List<Employee> filterList3 = filterList(employees,(e)->e.getAge()>60);
for (Employee employee : filterList3) {
System.out.println(employee);
}
}
}
over…