Index mit Java8 Stream.map hinzufügen (Tupple-Version)

Vorwort

In i02302 Index mit Stream.map nach Java 8 hinzufügen wurde beschrieben, wie jedem Element von Stream ein Index hinzugefügt wird.

Als ich es zum ersten Mal sah, verwendete ich ein Array für den Indexzähler, und ich dachte, es wäre besser, eine atomare Ganzzahl unter Berücksichtigung paralleler Streams zu verwenden ... aber als ich es früher sah, änderte sich das (lacht).

Wenn Sie danach BiFuntion verwenden, ist der Indexteil von int Integer. Ich denke, es ist besser, Ihre eigene Funktionsschnittstelle vorzubereiten.

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))

Wie man einen Taple zubereitet

Scalas zipWithIndex gibt ein Element-Index-Paar (Taple) zurück, es ist also dasselbe. Ich denke, es gibt auch einen Weg, dies zu tun.

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

Index mit Java8 Stream.map hinzufügen (Tupple-Version)
Java-Versionsverwaltung mit SDKMAN
Java-Versionsverwaltung mit jenv
Bean Validation mit Micronaut (Java) hinzufügen
Java (add2)
Java (hinzufügen)
Versionsverwaltung von Java mit jenv von OSX
Java-Versionsprüfung
Ich möchte Java8 für jeden mit Index verwenden
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Installieren Sie Java mit Homebrew
[Java] PDF-Version konvertieren
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Vergleich der Java-Versionsnotation
Bequemer Download mit JAVA
Schalten Sie Java mit direnv
Java-Version wechseln (Denkmal)
[Java] Initialisierung, Hinzufügung, Erfassung
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Java: Datum hinzufügen [Hinweis]
Endian-Konvertierung mit JAVA
Ein Memo zum Starten der Java-Programmierung mit VS Code (Version 2020-04)