小编TH-*_*ONG的帖子

如何在Java8中进行分组和归约

正如我List的主题

"Subjects":[
{"subject":"Math","grades":1},
{"subject":"Math","grades":2},
{"subject":"Math","grades":3},
{"subject":"Math","grades":3},
{"subject":"Lab","grades":10},
{"subject":"Lab","grades":12}
]
Run Code Online (Sandbox Code Playgroud)

我想这样分组并减少结果

//Expected Result
"Subjects":[
{"subject":"Math","grades":[1,2,3]},
{"subject":"Lab","grades":[10,12]}
]
Run Code Online (Sandbox Code Playgroud)

我很好奇如何映射和减少java8风格的对象。我在下面放置了过时的代码。

我的主班

public static void main(String[] args)  {
List<Subject> list = new ArrayList<>();
list.add(new Subject("Math",1));
list.add(new Subject("Math",2));
list.add(new Subject("Math",3));
list.add(new Subject("Math",3));
list.add(new Subject("Lab",10));
list.add(new Subject("Lab",12));        
Map<String, Set<Integer>> result = new HashMap<>();
list.stream().forEach(subjects-> {
    if(result.get(subjects.getSubject())==null){
        Set<Integer> set = new HashSet<>();
        set.add(subjects.getGrades());
        result.put(subjects.getSubject(),set );
    }else{
        Set<Integer> set =result.get(subjects.getSubject());
        set.add(subjects.getGrades());
        result.put(subjects.getSubject(), set);
    }
    });

    result.forEach((key,val)->{
        System.out.println("KEY:"+key + " RESULT :"+val);
    });

}  


public class Subject …
Run Code Online (Sandbox Code Playgroud)

java lambda arraylist java-8 java-stream

2
推荐指数
1
解决办法
88
查看次数

标签 统计

arraylist ×1

java ×1

java-8 ×1

java-stream ×1

lambda ×1