[Java] Remarque sur les collecteurs de flux

Notes personnelles

Collectors#toMap()

Je veux utiliser LinkedHashMap

Je veux utiliser LikedHashMap explicitement. En passant, je souhaite autoriser les clés en double.

	public static <T, K, V> Collector<T, ?, Map<K, V>> toMap(
			Function<? super T, ? extends K> keyMapper,
			Function<? super T, ? extends V> valueMapper) {

		return Collectors.toMap(
				keyMapper,
				valueMapper,
				(a, b) -> b,
				LinkedHashMap::new);
	}

Lancez une exception si vous ne souhaitez pas autoriser les clés en double.

(a, b) -> { throw new IllegalStateException(~); }

Voir les collecteurs standard à deux arguments # toMap () pour plus de détails.

Je souhaite utiliser TreeMap

Je veux trier naturellement par clé. presque la même.

	public static <T, K, V> Collector<T, ?, Map<K, V>> toTreeMap(
			Function<? super T, ? extends K> keyMapper,
			Function<? super T, ? extends V> valueMapper) {

		return Collectors.toMap(
				keyMapper,
				valueMapper,
				(a, b) -> b,
				TreeMap::new); //★ Ici
	}

Lorsque vous souhaitez spécifier Composer pour TreeMap, spécifiez-le avec une expression lambda au lieu d'une référence de constructeur.

Collectors#toSet()

Je souhaite utiliser LinkedHashSet

Le point ici est d'utiliser toCollection () au lieu de toSet ().

	public static <T> Collector<T, ?, Set<T>> toSet() {
		return Collectors.toCollection(LinkedHashSet::new);
	}

Je souhaite utiliser TreeSet

Fondamentalement la même chose.

	public static <T> Collector<T, ?, Set<T>> toTreeSet() {
		return Collectors.toCollection(TreeSet::new);
	}

Collectors#groupingBy

Je veux utiliser LinkedHashMap

	public static <T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(
			Function<? super T, ? extends K> classifier) {

		return Collectors.groupingBy(classifier,
				LinkedHashMap::new, //★ Ici
				Collectors.toList());
	}

Je souhaite utiliser TreeMap

le même.

	public static <T, K> Collector<T, ?, Map<K, List<T>>> orderedGroupBy(
			Function<? super T, ? extends K> classifier) {

		return Collectors.groupingBy(classifier,
				TreeMap::new, //★ Ici
				Collectors.toList());
	}

Je veux que l'élément soit un ensemble au lieu d'une liste

... Je ne peux pas penser à un bon nom de méthode.

	public static <T, K> Collector<T, ?, Map<K, Set<T>>> groupingBySet(
			Function<? super T, ? extends K> classifier) {

		return Collectors.groupingBy(classifier,
				TreeMap::new,
				Collectors.toCollection(LinkedHashSet::new)); //★ Ici
	}

Bien sûr, TreeSet ou Collectors.toSet () ordinaire peuvent être utilisés selon le but.

Je souhaite également convertir les éléments à emballer dans la liste lors du regroupement

	public static <T, K, D> Collector<T, ?, Map<K, List<D>>> groupingBy(
			Function<? super T, ? extends K> classifier,
			Function<? super T, ? extends D> mapper) {

		return Collectors.groupingBy(classifier,
				LinkedHashMap::new,
				Collectors.mapping(mapper, //★ Ici
						Collectors.toList()));
	}

Bien sûr, vous pouvez utiliser Set au lieu de List.

Collectors#collectingAndThen

Si vous souhaitez générer une carte ou une liste immuable.

	public static <T, K, V> Collector<T, ?, Map<K, V>> toConstMap(
			Function<? super T, ? extends K> keyMapper,
			Function<? super T, ? extends V> valueMapper) {

		return Collectors.collectingAndThen(
				Collectors.toMap(
					keyMapper,
					valueMapper),
				Collections::unmodifiableMap);
	}

Recommended Posts

[Java] Remarque sur les collecteurs de flux
note java
Génériques Java (Notes)
Essayez Java 8 Stream
[Java] Note sur le tableau
API Java Stream
[Java] Notes d'étude
Notes de sérialisation Java
Étudier Java 8 (Stream)
Terminaison du flux Java
[Java] Traitement de flux
Java 9 Facultatif :: stream
Sortie au format Java [Note]
Etudier Java 8 (Collector / Collectors)
[Java] Génération de flux API-Stream
API Stream (classe Collectors)
[Java] API / carte de flux
[Java] Note sur la syntaxe de contrôle
Notes de révision de Java NIO 2
Pratique de l'API Java8 Stream
À propos de l'opération de réduction du flux Java8
[Java] Notes de méthode de base
Résumé approximatif du flux Java8
[Java11] Résumé du flux -Avantages du flux-
Essayez de gratter en utilisant Java [Note]
Aide-mémoire de l'API Java Stream
[Implémentation] Notes de classe de processus java
Notes de révision de Java Collections Framework
API Java Stream en 5 minutes
Flux Java8, résumé de l'expression lambda
[Java] Stream API - Traitement de l'arrêt du flux
[Java] Stream API - Traitement intermédiaire de flux
Java Stream ne peut pas être réutilisé.
[Java] Introduction à l'API Stream
[Java11] Résumé de l'utilisation du flux -Basics-
Application Java pour les débutants: stream
[Java] Opération intermédiaire de l'API Stream
[Java 8] Suppression en double (et vérification en double) avec Stream
[Java] Stream (filtrer, mapper, forEach, réduire)
[java8] Pour comprendre l'API Stream
[Java] Types de base et notes d'instructions
À propos de Lambda, Stream, LocalDate de Java8
[Introduction à Java] À propos de l'API Stream
[Java] Vérification de l'existence des éléments avec Stream
Remarques sur le contrôle du signal en Java
Java
J'ai essayé d'utiliser l'API Java8 Stream
Flux de traitement de base de Java Stream
Remarques sur le traitement des threads Android (java)
Java
Java 8 ~ Stream API ~ pour commencer maintenant
Remarques sur le chemin et le package Java
Liste de conversion mutuelle de tableau / liste / flux Java
Conversion de liste Java8 avec Stream map
Utilisez-vous Stream en Java?
Traitement des données à l'aide de l'API de flux de Java 8
Essayez d'utiliser l'API Stream en Java
De nos jours, les expressions Java Lambda et l'API de flux
Trier par plusieurs conditions à l'aide de Java Stream