当前位置: 代码迷 >> 综合 >> 入门lambda(一) Comparator example
  详细解决方案

入门lambda(一) Comparator example

热度:31   发布时间:2023-12-29 17:00:02.0

今天开始学习Java 8 的 Lambda 表达式,写比较器去操作List 的排序

1.不使用Lambda 进行排序

package sort;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;/*** 不使用Lambda进行排序  */
public class SortWithoutLambda {public static void main(String[] args) {List<Developer> listDevs = getDevelopers();System.out.println("Before Sort");for (Developer developer : listDevs) {System.out.println(developer);}//重写Comparator规则Collections.sort(listDevs, new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o1.getAge()-o2.getAge();// return o1.getAge().compareTo(o2.getAge()); 都行}});System.out.println("After Sort");for (Developer developer : listDevs) {System.out.println(developer);}}private static List<Developer> getDevelopers(){List<Developer> result = new ArrayList<>();result.add(new Developer("mkyong", new BigDecimal("70000"), 33));result.add(new Developer("alvin", new BigDecimal("80000"), 20));result.add(new Developer("jason", new BigDecimal("100000"), 10));result.add(new Developer("iris", new BigDecimal("170000"), 55));return result;}
}

当排序规则改变了, 你还要创建一个新的匿名类 :

Java 8 有了 List.sort() 方法,但这样其实差不多的

listDevs.sort(new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o1.getAge()-o2.getAge();}});

但这也给使用lambda 提供了可能

package sort;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;/*** 使用Lambda进行排序*/
public class SortWithLambda {public static void main(String[] args) {List<Developer> listDevs = getDevelopers();System.out.println("Before Sort");for (Developer developer : listDevs) {System.out.println(developer);}// List.sort() since Java 8// way1   listDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());// way2   listDevs.sort((o1,o2)->o1.getAge()-o2.getAge());//        Comparator<Developer> ageComparator = (o1,o2)->o1.getAge()-o2.getAge();
//        listDevs.sort(ageComparator.reversed());/**上面两个reversed的话要自己反着写比较规则* 或者   把Compator 拿出来再进行反转,这样失去了 lambda 的意义* 使用新方式*/listDevs.sort(Comparator.comparing(Developer::getAge).reversed());//反转System.out.println("After Sort");// listDevs.forEach((developer -> System.out.println(developer))); // old waylistDevs.forEach(System.out::println);}private static List<Developer> getDevelopers(){List<Developer> result = new ArrayList<>();result.add(new Developer("mkyong", new BigDecimal("70000"), 33));result.add(new Developer("alvin", new BigDecimal("80000"), 20));result.add(new Developer("jason", new BigDecimal("100000"), 10));result.add(new Developer("iris", new BigDecimal("170000"), 55));return result;}
}

 

  相关解决方案