TWI:
私は、Java 8ストリームAPIを使用してはるかに簡単かもしれない次のコードを持っています:
List<List<String>> listOfListValues;
public List<String> getAsFlattenedList() {
List<String> listOfValues= new ArrayList<>();
for (List<String> value: listOfListValues) {
listOfValues.add(String.valueOf(value));
}
return listOfValues;
}
私はSOの解決策を検索し、これを見つけました:
listOfListValues.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
しかし、これは私が欲しいものを同じことをしていません。
ローランド:
あなただけの「シンプル」を必要とmap
ここに:
List<List<String>> listOfListValues;
public List<String> getAsFlattenedList() {
return listOfListValues.stream()
.map(String::valueOf)
.collect(toList());
}
flatMap
むしろ1変換するために使用されStream
ますが少ないし、より多くのエントリまたはが必要な場合は理にかなっている、別の現在利用可能な(あるいは単に、新たにマッピングされたStream
フィルタ/マップ/など、それをさらに下に)、例えば:
すべてのリストのすべてのユニークな文字列を数えます:
listOfListValues.stream() .flatMap(List::stream) // we want to count all, also those from the "inner" list... .distinct() .count()
一定の大きさの後にTRUNCATEエントリ:
listOfListValues.stream() .flatMap(list -> { if (list.size() > 3) // in this case we use only some of the entries return Stream.concat(list.subList(0, 2).stream(), Stream.of("...")); else return list.stream(); }) .collect(Collectors.toList());
いくつかの興味のあるキーのマップの値を平坦化します。
Map<Key, List<Value>> map = new HashMap<>(); Stream<Value> valueStream = interestedKeys.stream() .map(map::get) .flatMap(List::stream);