让我首先更准确地描述这项任务。给出了以下类和内部类:
public class Title {
private List<Line> lines;
public Title() {
this(new ArrayList<>());
}
public Title(List<Line> lines) {
this.lines = lines;
}
public void add(Line l) {
lines.add(l);
}
@Override
public String toString() {
return lines.toString();
}
public List<Line> getLines() {
return new ArrayList<>(lines);
}
public class Line {
private String line;
public Line(String line) {
this.line = line;
}
@Override
public String toString() {
return line;
}
}
假设我们有一个List<Title> titles
. 任务是从每行的字符串表示中获取一个映射,到它在 中的出现总数titles
。作为提示,它声明flatMap
是必需的,并且有一个解决方案 withCollectors.toMap
和 one with Collectors.groupingBy
。
我想出了前者,但我强烈担心它是不必要的复杂。我该如何改进它?这里是:
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.flatMapping;
import static java.util.Collections.frequency;
Map<String, Integer> countsStringMap1 = titles.stream()
.flatMap(t-> t.getLines().stream().map(Line::toString))
.distinct()
.collect(toMap(Function.identity(),
s -> frequency(titles.stream()
.flatMap(t-> t.getLines()
.stream()
.map(Line::toString))
.collect(toList()), s)));
我无法与 达成任何解决方案groupingBy
,我尝试了与Collectors.mapping
但无济于事的组合。
怎么做到呢?