リストにグループ分けつのフィールドを持つオブジェクトのリストにJavaの8地図

遺伝子b。

初心者の質問。私はDBから行ごと来る原豆を有します

public class DataBean {
   private Integer employeeId;
   private String org;
   private String comments;
   // + Constructors, getters/setters
}

私は、リストの中に従業員IDでグループ化された複数の組織の持つ別のBeanにそれをマップする必要があります。唯一の[組織は、社員のために複数のことができます。コメント欄には同じであることが保証されます。

public class CustomDataBean {
   private Integer employeeId;
   private List<String> orgs;
   private String comments;
   // + Constructors, getters/setters
}

始めるのに苦労。考えていたgroupingBy地図が、以下戻っているような、と私は、サブリストを構築していませんよ。

Map<Integer, List<String>> temp = origData.stream().collect(
    Collectors.groupingBy(OrigBean::getEmployeeId,
    /* 2nd param? */ .. ))

私の目標は、形質転換されますList<CustomDataBean>

サミュエル・フィリップ:

あなたはこれを使用することができます:

List<CustomDataBean> result = origData.stream()
        .collect(Collectors.groupingBy(DataBean::getEmployeeId))
        .entrySet().stream()
        .map(e -> new CustomDataBean(
                e.getKey(),
                e.getValue().stream().map(DataBean::getOrg).collect(Collectors.toList()),
                e.getValue().get(0).getComments()))
        .collect(Collectors.toList());

これは、あなたにグループ化された結果をマップCustomDataBeanオブジェクト。

入力の場合:

List<DataBean> origData = Arrays.asList(
        new DataBean(1, "a", "c"),
        new DataBean(1, "b", "c"),
        new DataBean(1, "c", "c"),
        new DataBean(2, "a", "d"),
        new DataBean(2, "c", "d")
);

結果はこのようになります。

CustomDataBean[employeeId=1, orgs=[a, b, c], comments='c']
CustomDataBean[employeeId=2, orgs=[a, c], comments='d']

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=278634&siteId=1