带有集合的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}