[JAVA] Gibt eine beliebige Map-Klasse in Collectors.toMap zurück

Collectors.toMap gibt normalerweise eine Instanz der Map-Klasse zurück.

Collectors.toMap Beispiel


enum ENUM {
	ENUM_1
	,ENUM_2
	,ENUM_3
	,ENUM_4
	,ENUM_5
	,ENUM_6
}


Map<ENUM, Integer> map = Stream.of(ENUM.values())
		.collect(Collectors.toMap(
			e -> e
			,e -> e.ordinal()
		));

Wenn Sie eine untergeordnete Klasse der Map-Klasse wie HashMap, LinkedHashMap oder TreeMap zurückgeben möchten, können Sie Collectors.toMap mit vier Argumenten verwenden.

Collectors.toMap


toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)

Collectors.Beispiel für die Rückgabe von HashMap mit toMap


HashMap<ENUM, Integer> map= Stream.of(ENUM.values())
		.collect(Collectors.toMap(
			e -> e
			,e -> e.ordinal()
			,(e1, e2) -> e1
			,HashMap::new
		));

Wenn Collectors.toMap EnumMap zurückgeben soll, verfügt EnumMap nicht über einen argumentlosen Konstruktor. In diesem Fall ist die Implementierung in Ordnung, wenn Sie sie mit einem Lambda-Ausdruck implementieren, da nicht auf den Konstruktor verwiesen werden kann.

Collectors.Beispiel 1, das EnumMap mit toMap zurückgibt


EnumMap<ENUM, Integer> map = Stream.of(ENUM.values())
		.collect(Collectors.toMap(
			e -> e
			,e -> e.ordinal()
			,(e1, e2) -> e1
			,() -> {
				EnumMap<ENUM, Integer> ret = new EnumMap<>(ENUM.class);
				return ret;
			}
		));

Wenn Sie verschiedene Dinge weglassen, können Sie auch wie folgt schreiben.

Collectors.Beispiel 2 Rückgabe von EnumMap mit toMap


EnumMap<ENUM, Integer> map = Stream.of(ENUM.values())
		.collect(Collectors.toMap(
			e -> e
			,e -> e.ordinal()
			,(e1, e2) -> e1
			,() -> new EnumMap<>(ENUM.class)
		));

Recommended Posts

Gibt eine beliebige Map-Klasse in Collectors.toMap zurück
NullpointException in der injizierenden Klasse
Schreiben Sie die Klassenvererbung in Ruby