lambda函数是变成对集合进行排序的几种方式

来源:互联网 发布:汽车用品淘宝 编辑:程序博客网 时间:2024/06/18 05:34

先来一个集合:

List<Point> points = Arrays.asList(     new Point(1, 2),     new Point(3, 2),     new Point(4, 2),     new Point(2, 2));

方式一:

// 比较器方法Comparator<Point> byX = new Comparator<Point>() {    @Override    public int compare(Point p1, Point p2) {          return Double.compare(p1.getX(), p2.getX());    }};

方式二(最简单):

Comparator<Point> byX = Comparator.comparing(Point::getX);

方式三(过时):

Comparator<Point> byX = (p1, p2) -> Double.compare(p1.getX(), p2.getX());

方式四:

Function<Point, Double> keyExtractor = point -> point.getX();Comparator<Double> keyComparer = Double::compare;Comparator<Point> byX = (p1, p2) -> keyComparer.compare(keyExtractor.apply(p1), keyExtractor.apply(p2));

方式五(方式四的进阶版推荐):

// 封装一个比较的方法public static <T,U extends Comparable<U>> Comparator<T> comparing(Function<T,U> keyExtractor){    return Comparator.comparing(keyExtractor::apply);}Function<Point, Double> keyExtractor = point -> point.getX();Comparator<Point> byX = comparing(keyExtractor);

测试:

System.out.println("排序前:" + points);points.sort(byX);System.out.println("排序后:" + points);

测试结果:

排序前:[java.awt.Point[x=1,y=2],  java.awt.Point[x=3,y=2],  java.awt.Point[x=4,y=2],  java.awt.Point[x=2,y=2]]排序后:[java.awt.Point[x=1,y=2],  java.awt.Point[x=2,y=2],  java.awt.Point[x=3,y=2],  java.awt.Point[x=4,y=2]]

本文参考:《精通lambda表达式:java多核编程》

原创粉丝点击