Java Lambda表达式与集合

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程