Java Lambda表达式与集合
本文讨论了使用Lambda表达式对不同的集合进行排序的例子,如ArrayList、TreeSet、TreeMap等。 使用比较器对集合进行排序(或不使用Lambda): 我们可以使用比较器接口进行排序,它只包含一个抽象方法:- compare()。一个只包含单一抽象方法的接口被称为功能接口。
- 使用比较器(I)。-
- 比较()方法的原型:-
在定义我们自己的排序时,JVM总是会调用比较器来比较()方法。
- 返回负值(-1),当且仅当obj1排在obj2之前。
- 返回正值(+1),当且仅当obj1在obj2之后。
- 只有当obj1和obj2相等时,才返回0(0)。
在List、Set、Map或其他任何地方,当我们想定义自己的排序方法时,JVM总是会在内部调用compare()方法。 当使用功能接口概念时,我们可以使用Lambda表达式来代替它。使用Lambda对List(I)的元素进行排序
表达式:- 使用Lambda表达式代替比较器对象来定义我们自己在集合中的排序。
import java.util.*;
public class Demo {
public static void main(String[] args)
{
ArrayList<Integer> al = new ArrayList<Integer>();
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);
}
}
使用Lambda表达式对TreeSet进行排序
import java.util.*;
public class Demo {
public static void main(String[] args)
{
TreeSet<Integer> h =
new TreeSet<Integer>((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);
}
}
使用Lambda表达式对TreeMap的元素进行排序: 排序将在键的基础上进行,而不是其值。
import java.util.*;
public class Demo {
public static void main(String[] args)
{
TreeMap<Integer, String> m =
new TreeMap<Integer, String>((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);
}
}
也可以在调用TreeSet()构造函数时直接通过lambda表达式指定一个反向比较器,如图所示
// Use a lambda expression to create a reverse comparator
import java.util.*;
class GFG{
public static void main(String args[]){
// Pass a reverse comparator to TreeSet() via a lambda expression
TreeSet<String> ts=new TreeSet<String>((aStr,bStr) -> bStr.compareTo(aStr));
// Add elements to the Treeset
ts.add("A");
ts.add("B");
ts.add("C");
ts.add("D");
ts.add("E");
ts.add("F");
ts.add("G");
//Display the elements .
for(String element : ts)
System.out.println(element + "");
System.out.println();
}
}
输出
G
F
E
D
C
B
A
极客教程