Ajouter un index avec Java8 Stream.map (version tupple)

Préface

[Ajouter un index avec Stream.map après Java 8] de i02302 (https://qiita.com/i02302/items/4e4cc1ec68c3a91253bb) a décrit comment ajouter un index à chaque élément de Stream.

Quand je l'ai vu pour la première fois, j'utilisais un tableau pour le compteur d'index, et j'ai pensé qu'il serait préférable d'utiliser un entier atomique en tenant compte des flux parallèles ... mais quand je l'ai vu plus tôt, cela a changé (rires).

Après cela, si vous utilisez BiFuntion, la partie index de int sera Integer, donc je pense qu'il est préférable de préparer votre propre interface fonctionnelle.

public interface BiIntFunction<T, R> {
	public R apply(T t, int n);
}

public class WithIndex {
	public static <T, R> Function<T, R> apply(int start, BiIntFunction<T, R> function) {
		AtomicInteger counter = new AtomicInteger(start);
		return object -> function.apply(object, counter.getAndAdd(1));
	}
}
stream.map(WithIndex.apply(1, (obj, i) -> obj + i))

Comment préparer un taple

[ZipWithIndex] de Scala (http://www.ne.jp/asahi/hishidama/home/tech/scala/collection/method.html#zipWithIndex) renvoie une paire élément-index (taple), donc c'est la même chose. Je pense qu'il y a aussi un moyen de le faire.

public class ObjectIndexPair<T> {
	private final T object;
	private final int index;

	private ObjectIndexPair(T object, int index) {
		this.object = object;
		this.index = index;
	}

	public T getObject() {
		return object;
	}

	public int getIndex() {
		return index;
	}

	public static <T> Function<T, ObjectIndexPair<T>> start(int start) {
		AtomicInteger counter = new AtomicInteger(start);
		return object -> new ObjectIndexPair<>(object, counter.getAndAdd(1));
	}
}
stream.map(ObjectIndexPair.start(1)).map(pair -> pair.getObject() + pair.getIndex())

Recommended Posts

Ajouter un index avec Java8 Stream.map (version tupple)
Gestion des versions Java avec SDKMAN
Gestion des versions Java avec jenv
Ajouter une validation de bean avec Micronaut (Java)
Java (add2)
Java (ajouter)
Gestion des versions de java avec jenv d'OSX
Vérification de la version Java
Je veux utiliser java8 forEach avec index
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Installez java avec Homebrew
[Java] Convertir la version PDF
Changer de siège avec Java
Installez Java avec Ansible
Comparaison de la notation de la version Java
Téléchargement confortable avec JAVA
Changer java avec direnv
Changement de version Java (mémorial)
[Java] Initialisation, ajout, acquisition
Téléchargement Java avec Ansible
Raclons avec Java! !!
Construire Java avec Wercker
java: Ajouter une date [Note]
Conversion Endian avec JAVA
Un mémo pour démarrer la programmation Java avec VS Code (version 2020-04)