如何使用 Collectors groupingBy 将频率映射到新对象?
How to map frequencies to a new object with Collectors groupingBy?
获取class个对象的描述频率:
public class Tag {
private int excerptID;
private String description;
}
我使用 Collectors groupingBy + 计数函数:
Map<String, Long> frequencyMap = rawTags.stream().map(Tag::getDescription).collect(Collectors.groupingBy(e -> e, Collectors.counting()));
但是我想return这个结果作为一个新的对象class
public class Frequency {
private String Description;
private Long frequency;
}
而不是 Map<String, Long>
。有什么简单的方法可以做到?
您可以获取 entrySet
的地图并转换为 Frequency class 并收集为 List。
rawTags.stream()
.map(Tag::getDescription)
.collect(Collectors.groupingBy(e -> e, Collectors.counting()))
.entrySet()
.stream()
.map(e -> new Frequency(e.getKey(), e.getValue()))
.collect(Collectors.toList());
或使用Collectors.collectingAndThen
rawTags.stream()
.map(Tag::getDescription)
.collect(Collectors.groupingBy(e -> e,
Collectors.collectingAndThen(Collectors.toList(),
e -> new Frequency(e.get(0), Long.valueOf(e.size())))));
获取class个对象的描述频率:
public class Tag {
private int excerptID;
private String description;
}
我使用 Collectors groupingBy + 计数函数:
Map<String, Long> frequencyMap = rawTags.stream().map(Tag::getDescription).collect(Collectors.groupingBy(e -> e, Collectors.counting()));
但是我想return这个结果作为一个新的对象class
public class Frequency {
private String Description;
private Long frequency;
}
而不是 Map<String, Long>
。有什么简单的方法可以做到?
您可以获取 entrySet
的地图并转换为 Frequency class 并收集为 List。
rawTags.stream()
.map(Tag::getDescription)
.collect(Collectors.groupingBy(e -> e, Collectors.counting()))
.entrySet()
.stream()
.map(e -> new Frequency(e.getKey(), e.getValue()))
.collect(Collectors.toList());
或使用Collectors.collectingAndThen
rawTags.stream()
.map(Tag::getDescription)
.collect(Collectors.groupingBy(e -> e,
Collectors.collectingAndThen(Collectors.toList(),
e -> new Frequency(e.get(0), Long.valueOf(e.size())))));