意识到Java 8将在接下来的几周内发布其GA版本之后,我认为现在是时候来看看它了,在过去的一周里,我一直在阅读Venkat Subramaniam的书 。

我要讲的是第3章,其中涉及对人员集合进行排序。 Person类的定义大致如下:

static class Person {private String name;private int age;Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return String.format("Person{name='%s', age=%d}", name, age);}
}

在第一个示例中,我们列出了人员列表,然后按年龄升序对其进行了排序:

List<Person> people = Arrays.asList(new Person("Paul", 24), new Person("Mark", 30), new Person("Will", 28));
people.stream().sorted((p1, p2) -> p1.age - p2.age).forEach(System.out::println);
Person{name='Paul', age=24}
Person{name='Will', age=28}
Person{name='Mark', age=30}

如果我们要编写一个函数来在Java 7中做同样的事情,它将看起来像这样:

Collections.sort(people, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {return o1.age - o2.age;}
});for (Person person : people) {System.out.println(person);
}

Java 8减少了我们必须编写的代码量,尽管它比我们在Ruby中所能完成的还要复杂:

> people = [ {:name => "Paul", :age => 24}, {:name => "Mark", :age => 30}, {:name => "Will", :age => 28}]
> people.sort_by { |p| p[:age] }
=> [{:name=>"Paul", :age=>24}, {:name=>"Will", :age=>28}, {:name=>"Mark", :age=>30}]

几页后,Venkat展示了如何使用Comparator#comparing函数来接近这一点:

Function<Person, Integer> byAge = p -> p.age ;
people.stream().sorted(comparing(byAge)).forEach(System.out::println);

我以为可以通过内联'byAge'lambda来简化此过程:

people.stream().sorted(comparing(p -> p.age)).forEach(System.out::println);

尽管IntelliJ 13.0提示存在“ 循环推断 ”问题,但这似乎可以正确编译并运行。 如果我们像下面这样显式地转换lambda,则IntelliJ很高兴:

people.stream().sorted(comparing((Function<Person, Integer>) p -> p.age)).forEach(System.out::println);

如果我们在lambda中显式键入'p',IntelliJ似乎也很高兴,所以我认为我暂时会使用它:

people.stream().sorted(comparing((Person p) -> p.age)).forEach(System.out::println);
参考: Java 8:在Mark Needham博客博客中对来自JCG合作伙伴 Mark Needham的集合中的值进行排序 。

翻译自: https://www.javacodegeeks.com/2014/02/java-8-sorting-values-in-collections.html

Java 8:对集合中的值进行排序相关推荐

  1. java集合根据值排序_Java 8:对集合中的值进行排序

    java集合根据值排序 意识到Java 8将在接下来的几周内发布其GA版本之后,我认为现在是时候来看看它了,在过去的一周里,我一直在阅读Venkat Subramaniam的书 . 我要讲的是第3章, ...

  2. el表达式遍历list中的list_EL表达式获取map和list集合中的值 | 学步园

    Map的每个对象以key=value的形式给出 当forEach tag的item属性中的表达式的值是java.util.Map时,在var中命名的变量被设置为类型是java.util.Map.Ent ...

  3. selenium+java:获取列表中的值

    selenium+java:获取列表中的值 (2011-08-23 17:14:48) 标签: 杂谈 分类: selenium 初步研究利用java+testNg框架下写selenium测试用例,今天 ...

  4. 对List集合中的元素进行排序

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. ollections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序, ...

  5. java map替换_在java的Map集合中,怎样更改value的值

    展开全部 map集合没有专门更改value的方法,更改value的方法就是636f70793231313335323631343130323136353331333436316363map.put(k ...

  6. java返回fail_Java集合中的fail-fast(快速失败)机制详解

    简介 我们知道Java中Collection接口下的很多集合都是线程不安全的, 比如 java.util.ArrayList不是线程安全的, 因此如果在使用迭代器的过程中有其他线程修改了list,那么 ...

  7. Java 获取Enum枚举中的值,以列表方式返回

    有时候,有一些下拉选择器的数据项,我们采取了枚举的方式简单记录,但是里面的东西多,前端不想写死,需要提供接口返回. 示例: 枚举 /*** @Author: JCccc* @Description:* ...

  8. java如何对List集合中的元素进行排序(请收藏)

    在java开发中有时候我们需要对List集合中的元素按照一定的规则进行排序,比如说有个Person的集合,我们要根据Person的age属性进行排序输出,这就需要用到Java中提供的对集合进行操作的工 ...

  9. java基础—TreeSet集合中储存自定义对象(java集合二)

    TreeSet集合中储存学生对象,按照其年龄进行排序 TreeSet对元素进行排序的方式一: 让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖compareTo方法. TreeSe ...

最新文章

  1. 全球与中国工业低压变频器市场十四五前景规划和远景目标建议报告2022-2028年版
  2. 只靠开源的时代已经过去,BAT都在这样做!
  3. ArcGIS中国工具(ArcGISCTools)3.2 安装教程(附安装包下载)
  4. iOS-高仿支付宝手势解锁(九宫格)
  5. threejs加载模型挤压变形_玻璃钢模具表面变形的原因及解决办法
  6. 你在现实中遇到让你最跌破三观的人或者事是什么?
  7. 在PaaS上构建SaaS应用程序需要注意什么
  8. 记 笔记软件极力推荐------------->思源
  9. hdu2108 判断是凸多边形还是凹多边形
  10. SL4A_API翻译贴镜像
  11. python不能使用下标运算的是()_下列选项中,不能使用下标运算的是( ).
  12. ubuntu如何安装libz库
  13. 数学原理-高等数学复习笔记 ——1.2 泰勒公式 罗尔中值定理与拉格朗日中值定理(附加多个实战题目)
  14. Android 修改开机画面
  15. RuntimeError: Cannot re-initialize CUDA in forked subprocess解决方法之一
  16. 2006年十二生肖开运大预言
  17. 大聪明教你学Java | 实现邮件发送(以163邮箱向QQ邮箱发送邮件为例)
  18. 手机界面显示无服务器,手机直接投屏电视,电视上显示投屏成功,却没有图像
  19. 实例教程_次世代兽人制作教程
  20. 代码静态检查工具汇总

热门文章

  1. java jpa saveall方法优化_JPA批量插入(saveAll)
  2. mysql级联复制转换成一主两从_一主两从转级联复制
  3. nginx应用领域分类+事件模型
  4. removeAll throws java.lang.UnsupportedOperationException
  5. volatile关键字的作用
  6. 打破双亲委派么,怎么打破_打破了vs你错了
  7. graphql 有必要吗_您准备好观看GraphQL了吗?
  8. jit编译_意外分配– JIT编译抖动
  9. jpa和hibernate_JPA和Hibernate级联类型的初学者指南
  10. java 事件通知_正确获取Java事件通知