(jdk8--->新特性一lambda表达式的语法及应用)jdk8的简介+数字排序和数据集合的排序方式案例(学了之后贼简单,轻轻松松做好排序)

转载请标明出处:https://blog.csdn.net/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…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值