使用Java 8 API将键-值对象对列表转换为简单的Multimap

具有键值列表:

public class KeyValue {

private Long key;

private Long value;

public KeyValue(long key, long value) {

this.key = key;

this.value = value;

}

//getters, setters, toStrings...

}

    List<KeyValue> values = new ArrayList<>();

values.add(new KeyValue(15, 10));

values.add(new KeyValue(15, 12));

values.add(new KeyValue(25, 13));

values.add(new KeyValue(25, 15));

如何使用Java 8 API将其转换为Multimap?

程序方式:

    Map<Long, List<Long>> keyValsMap = new HashMap<>();

for (KeyValue dto : values) {

if (keyValsMap.containsKey(dto.getKey())) {

keyValsMap.get(dto.getKey()).add(dto.getValue());

} else {

List<Long> list = new ArrayList<>();

list.add(dto.getValue());

keyValsMap.put(dto.getKey(), list);

}

}

结果:

{25 = [13,15],15 = [10,12]}

回答:

这正是groupingBy收集器允许您执行的操作:

Map<Long, List<Long>> result = values.stream()

.collect(Collectors.groupingBy(KeyValue::getKey,

Collectors.mapping(KeyValue::getValue, Collectors.toList())));

然后,mapping收集器将KeyValue对象转换为它们各自的值。

以上是 使用Java 8 API将键-值对象对列表转换为简单的Multimap 的全部内容, 来源链接: utcz.com/qa/429624.html

回到顶部