我是靠谱客的博主 懦弱大树,最近开发中收集的这篇文章主要介绍用java中用类方法编写排序_Java8 使用lambda表达式编写比较器对集合排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.概述

Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变,Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据。

在最简单的形式中,一个lambda可以由用逗号分隔的参数列表、–>符号与函数体三部分表示。例如:

Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );

本文主要讲解如果利用lambda表达式来编写比较器对集合进行排序。

首先,我们定义一个实体类:

public class Car {

private String name;

private int price;

public Car() {

super();

}

public Car(String name, int price) {

super();

this.name = name;

this.price = price;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

}

2. Java7排序方法

Java 7及以前我们通常通过创建内部匿名类用于排序 :

new Comparator() {

@Override

public int compare(Car c1, Car c2) {

return c1.getName().compareTo(c2.getName());

}

};

然后使用Collections.sort方法对List排序

Collections.sort(cars, new Comparator() {

@Override

public int compare(Car c1, Car c2) {

return c1.getName().compareTo(c2.getName());

}

});

3. 用lambda表达式排序

通过lambda表达式,我们可以绕过内部匿名类:

(Car c1, Car c2) -> c1.getName().compareTo(c2.getName());

具体如下:

List cars2 = Lists.newArrayList(new Car("benci", 10),

new Car("baoma", 12));

cars2.sort((Car c1, Car c2) -> c1.getName().compareTo(c2.getName()));

注意:我们现在使用Java8中在java.util.List 新sortAPI代替了以前的Collections.sort API

4. 使用无类型声明lambda表达式排序

事实上,可以省略这里的lambda参数的类型声明,编译器可以从列表的类属性推测出来。

(c1, c2) -> c1.getName().compareTo(c2.getName())

具体如下:

List cars3 = Lists.newArrayList(new Car("benci", 10),

new Car("baoma", 12));

cars3.sort((c1, c2) -> c1.getName().compareTo(c2.getName()));

5. 静态方法引用

lambda表达式表示在函数接口中定义的匿名函数。

方法引用使用现有方法创建lambda表达式。

方法引用的一般语法是

Qualifier::MethodName

我们用

cars4.sort(Car::compareByNameThenPrice);

在Car中加入静态方法:

public static int compareByNameThenPrice(Car car1, Car car2) {

if (car1.name.equals(car2.name)) {

return car1.price - car2.price;

} else {

return car1.name.compareTo(car2.name);

}

}

具体:

List cars4 = Lists.newArrayList(new Car("benci", 10),

new Car("baoma", 12));

cars4.sort(Car::compareByNameThenPrice);

6. 使用多条件排序

我们可以同时将多个比较器串起来:

List cars5 = Lists.newArrayList(new Car("benci", 10),

new Car("baoma", 12));

cars5.sort(Comparator.comparing(Car::getName)

.thenComparing(Car::getPrice));

7.总结

我们学习了如何使用lambda表达式与Comparator 类来对Java集合进行排序。

最后

以上就是懦弱大树为你收集整理的用java中用类方法编写排序_Java8 使用lambda表达式编写比较器对集合排序的全部内容,希望文章能够帮你解决用java中用类方法编写排序_Java8 使用lambda表达式编写比较器对集合排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部