网站建站知识,秦皇岛汽车网站制作,怎么设计门户网站,京美建站java 8 集合分组在继续阅读Venkat Subramaniam的“ Java函数式编程 ”时#xff0c;我到达了介绍Stream#xff03;collect函数的那部分。 我们想收集一个人#xff0c;按年龄分组并返回一张方便的地图#xff08;年龄-人的名字#xff09;。 要刷新#xff0c;这是… java 8 集合分组 在继续阅读Venkat Subramaniam的“ Java函数式编程 ”时我到达了介绍Streamcollect函数的那部分。 我们想收集一个人按年龄分组并返回一张方便的地图年龄-人的名字。 要刷新这是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);}
} 我们可以用Java 8编写以下代码来获取按年龄分组的人的名字的地图 StreamPerson people Stream.of(new Person(Paul, 24), new Person(Mark, 30), new Person(Will, 28));
MapInteger, ListString peopleByAge people.collect(groupingBy(p - p.age, mapping((Person p) - p.name, toList())));
System.out.println(peopleByAge);{24[Paul], 28[Will], 30[Mark]} 我们正在集合上运行“收集”功能并在进行时按“年龄”属性进行分组并对人员姓名而不是人员本身进行分组。 这与您在Ruby中所做的稍有不同在Ruby中您可以调用一个“ group_by”函数 people [ {:name Paul, :age 24}, {:name Mark, :age 30}, {:name Will, :age 28}]people.group_by { |p| p[:age] }{24[{:namePaul, :age24}], 30[{:nameMark, :age30}], 28[{:nameWill, :age28}]} 这会向我们提供按年龄分组的人员列表但我们需要应用其他“地图”操作来将其更改为姓名列表 people.group_by { |p| p[:age] }.map { |k,v| [k, v.map { |person| person[:name] } ] }[[24, [Paul]], [30, [Mark]], [28, [Will]]] 在这个阶段我们有一个年龄名字对的数组但是幸运的是Ruby 2.1.0有一个函数“ to_h”我们可以调用它来再次返回哈希 people.group_by { |p| p[:age] }.map { |k,v| [k, v.map { |person| person[:name] } ] }.to_h{24[Paul], 30[Mark], 28[Will]} 如果要在对集合执行归约操作时遵循Java按属性分组的方法则将具有以下内容 people.reduce({}) { |acc, item| acc[item[:age]] ||[]; acc[item[:age]] item[:name]; acc }{24[Paul], 30[Mark], 28[Will]} 如果我们使用Clojure则可能会得到如下所示的结果 (def people[{:name Paul, :age 24} {:name Mark, :age 30} {:name Will, :age 28}]) (reduce (fn [acc [k v]] (assoc-in acc [k] (map :name v))) {} (group-by :age people))
{28 (Will), 30 (Mark), 24 (Paul)} 我以为Java版本从一开始看起来有点怪异但是用其他几种语言解决了这个问题实际上还不错。 最好知道是否有更好的方法来使用Ruby / Clojure 参考 Java 8通过 Mark Needham博客博客的JCG合作伙伴 Mark Needham的收藏进行分组 。 翻译自: https://www.javacodegeeks.com/2014/02/java-8-group-by-with-collections.htmljava 8 集合分组