📜  带有集合的Java Lambda 表达式

📅  最后修改于: 2022-05-13 01:55:36.200000             🧑  作者: Mango

带有集合的Java Lambda 表达式

在这篇文章中,我们通过对不同集合(如 ArrayList、TreeSet、TreeMap 等)进行排序的示例讨论了带有集合的 Lambda 表达式。

使用 Comparator(或不使用 Lambda)对集合进行排序:
我们可以使用 Comparator 接口进行排序,它只包含一个抽象方法:– compare()。仅包含一个抽象方法的接口,则称为功能接口。

  • 比较器 (I) 的使用: –

    要定义我们自己的排序,即我们自己定制的排序,那么我们应该使用比较器的概念。

  • compare() 方法的原型:-

    compare() 方法将两个对象作为其参数。

    public int compare(Object obj1, Object obj2)
    

在定义我们自己的排序时,JVM 总是会调用 Comparator compare() 方法。

    compare() 方法工作:–
  • 返回负值 (-1),当且仅当 obj1 必须在 obj2 之前。
  • 返回正值 (+1),当且仅当 obj1 必须在 obj2 之后。
  • 当且仅当 obj1 和 obj2 相等时,返回零 (0)。

在 List、Set、Map 或其他任何地方,当我们想要定义自己的排序方法时,JVM 总是会在内部调用 compare() 方法。

当使用了函数式接口概念时,我们可以在其位置使用 Lambda 表达式。

使用 Lambda 表达式对 List(I) 的元素进行排序:-
使用 lambda 表达式代替比较器对象来定义我们自己的集合排序。

import java.util.*;
  
public class Demo {
    public static void main(String[] args)
    {
        ArrayList al = new ArrayList();
        al.add(205);
        al.add(102);
        al.add(98);
        al.add(275);
        al.add(203);
        System.out.println("Elements of the ArrayList " + 
                              "before sorting : " + al);
  
        // using lambda expression in place of comparator object
        Collections.sort(al, (o1, o2) -> (o1 > o2) ? -1 :
                                       (o1 < o2) ? 1 : 0);
  
        System.out.println("Elements of the ArrayList after" + 
                                           " sorting : " + al);
    }
}
输出:
Elements of the ArrayList before sorting : [205, 102, 98, 275, 203]
Elements of the ArrayList after sorting : [275, 205, 203, 102, 98]

使用 Lambda 表达式对 TreeSet 进行排序:-

import java.util.*;
  
public class Demo {
    public static void main(String[] args)
    {
        TreeSet h = 
                       new TreeSet((o1, o2) -> (o1 > o2) ? 
                                          -1 : (o1 < o2) ? 1 : 0);
        h.add(850);
        h.add(235);
        h.add(1080);
        h.add(15);
        h.add(5);
        System.out.println("Elements of the TreeSet after" + 
                                        " sorting are: " + h);
    }
}
输出:
Elements of the TreeSet after sorting are: [1080, 850, 235, 15, 5]

使用 Lambda 表达式对 TreeMap 的元素进行排序:-
排序将根据键而不是其值进行。

import java.util.*;
  
public class Demo {
    public static void main(String[] args)
    {
        TreeMap m = 
                   new TreeMap((o1, o2) -> (o1 > o2) ? 
                                               -1 : (o1 < o2) ? 1 : 0);
        m.put(1, "Apple");
        m.put(4, "Mango");
        m.put(5, "Orange");
        m.put(2, "Banana");
        m.put(3, "Grapes");
        System.out.println("Elements of the TreeMap " + 
                             "after sorting are : " + m);
    }
}
输出:
Elements of the TreeMap after sorting are : {5=Orange, 4=Mango, 3=Grapes, 2=Banana, 1=Apple}