在Java流中使用collectors.groupingBy修改返回的Map值类型

时间:2018-07-30 16:48:18

标签: java java-8

我的类定义为Entry-

public class Entry {
    private String key;
    private String Value;
    // getters and setters
    // equals hashcode toString
}

我从数据库中获得了Entry个对象的列表。 我想根据键对它们进行分组,结果Map的值应为Set<value>

我尝试了并得到下面的代码。

Map<String, Set<Entry>> groupedEntries =  
        entryList.findAll()
                 .stream()
                 .collect(Collectors.groupingBy(ek -> ek.getKey().toLowerCase(), Collectors.toSet()));

此代码的问题是结果类型为Map<String, Set<Entry>>,但我想成为Map<String, Set<String>>

是否可以在一次收集中执行此操作?

1 个答案:

答案 0 :(得分:7)

使用mapping收集器:

.collect(Collectors.groupingBy(ek -> ek.getKey().toLowerCase(), 
                  Collectors.mapping(Entry::getValue, Collector.toSet())));