1

获取类对象的描述频率:

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()));

但我想将结果作为类的新对象返回

 public class Frequency {
    private String Description;
    private Long frequency;
    }

而不是Map<String, Long>. 有什么简单的方法来做到这一点?

4

1 回答 1

1

您可以获取entrySet地图并转换为频率类并收集为列表。

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())))));
于 2020-09-18T10:09:48.373 回答