日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 8 集合分组_Java 8:按集合分组

發布時間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 8 集合分组_Java 8:按集合分组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java 8 集合分組

在繼續閱讀Venkat Subramaniam的“ Java函數式編程 ”時,我到達了介紹Stream#collect函數的那部分。

我們想收集一個人,按年齡分組并返回一張方便的地圖(年齡->人的名字)。

要刷新,這是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編寫以下代碼來獲取按年齡分組的人的名字的地圖:

Stream<Person> people = Stream.of(new Person("Paul", 24), new Person("Mark", 30), new Person("Will", 28)); Map<Integer, List<String>> 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=>[{:name=>"Paul", :age=>24}], 30=>[{:name=>"Mark", :age=>30}], 28=>[{:name=>"Will", :age=>28}]}

這會向我們提供按年齡分組的人員列表,但我們需要應用其他“地圖”操作來將其更改為姓名列表:

> 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.html

java 8 集合分組

總結

以上是生活随笔為你收集整理的java 8 集合分组_Java 8:按集合分组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。