Java8:Lambda表达式增强版Comparator和排序

发表于:2015-3-09 10:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:进林    来源:51Testing软件测试网采编

  1、概述
  在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排序。
  这篇文章是Baeldung上的“Java ——回归基础”(“Java – Back to Basic”)系列的一部分。
  首先,让我们先定义一个简单的实体类:
public class Human {
private String name;
private int age;
public Human() {
super();
}
public Human(final String name, final int age) {
super();
this.name = name;
this.age = age;
}
// standard getters and setters
}
  2、不使用Lambda表达式的基本排序
  在Java 8之前,对集合进行排序要为Comparator创建一个匿名内部类用来排序:
  new Comparator<Human>() {
  @Override
  public int compare(Human h1, Human h2) {
  return h1.getName().compareTo(h2.getName());
  }
  }
  简单地用它来对Human实体列表进行排序:
@Test
public void givenPreLambda_whenSortingEntitiesByName_thenCorrectlySorted() {
List<Human> humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12));
Collections.sort(humans, new Comparator<Human>() {
@Override
public int compare(Human h1, Human h2) {
return h1.getName().compareTo(h2.getName());
}
});
Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12)));
}
  3、使用Lambda表达式的基本排序
  根据Lambda表达式的介绍,我们现在可以不使用匿名内部类,只使用简单实用的语义就可以得到相同的结果。
  (final Human h1, final Human h2) -> h1.getName().compareTo(h2.getName());
  类似地,我们现在可以像之前那样来测试它的行为:
  @Test
  public void whenSortingEntitiesByName_thenCorrectlySorted() {
  List<Human> humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12));
  humans.sort((Human h1, Human h2) -> h1.getName().compareTo(h2.getName()));
  Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12)));
  }
  注意:我们同样使用新的sort API,这个API在Java 8里被添加到java.util.List ——而不是旧的Collections.sort API。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号