List<V>
をMap<K, List<V>>
に簡単に変換できます。たとえば、次のようにリスト<V>をどのようにマップ<K, List<V>に変換すると、Java 8ストリームとカスタムリストおよびマップサプライヤを備えていますか?
public Map<Integer, List<String>> getMap(List<String> strings) {
return
strings.stream()
.collect(Collectors.groupingBy(String::length));
}
しかし、私は私自身のList
とMap
サプライヤーでそれをやってみたいです。
私はこれが出ている:
public Map<Integer, List<String>> getMap(List<String> strings) {
return strings.stream()
.collect(Collectors.toMap(
String::length,
item -> {List<String> list = new ArrayList<>(); list.add(item); return list;},
(list1, list2) -> {list1.addAll(list2); return list1;},
HashMap::new));
}
質問:はそれをやってのより容易な、より少ない冗長、またはより効率的な方法はありますか?例えば(動作しない)このような、何か:
return strings.stream()
.collect(Collectors.toMap(
String::length,
ArrayList::new,
HashMap::new));
そして、何私はList
サプライヤーではなくMap
サプライヤーを定義する必要がある場合は?
[ 'groupingBy']があります(https://docs.oracle.com/javase/8/docs/api/java /util/stream/Collectors.html#groupingBy-java.util.function。Function-java.util.function.Supplier-java.util.stream.Collector-)オーバーロードしてマップサプライヤを取得します。 – Tunaki
ストリームに興味のある3つの引数収集メソッドがあります –