Lorsque vous utilisez la méthode java8 forEach, vous pouvez avoir besoin d'un index (numéro de série). À ce moment-là, si vous essayez d'utiliser une variable de compteur, vous ne pouvez pas la mettre à jour dans le lambda, vous devez donc utiliser un tableau.
Je ne peux pas faire ça
int i = 1;
java.util.stream.Stream.of("a", "b", "c", "d").forEach(s -> {
System.out.println(i + ": " + s);
i++;
});
Tu peux le faire
int i[] = { 1 };
java.util.stream.Stream.of("a", "b", "c", "d").forEach(s -> {
System.out.println(i[0] + ": " + s);
i[0]++;
});
Quoi qu'il en soit, les perspectives ne sont pas bonnes, alors je veux que cela ressemble à ceci.
Je veux faire ça
java.util.stream.Stream.of("a", "b", "c", "d").forEach(withIndex((s, i) -> System.out.println(i + ": " + s)));
Alors, créons une méthode utilitaire.
Le nom de la classe et le nom de la méthode sont appropriés
import java.util.function.Consumer;
import java.util.function.ObjIntConsumer;
public class With {
public static <T> Consumer<T> B(int start, ObjIntConsumer<T> consumer) {
int counter[] = { start };
return obj -> consumer.accept(obj, counter[0]++);
}
}
La valeur initiale peut également être définie.
l'a fait
java.util.stream.Stream.of("a", "b", "c", "d").forEach(With.B(1, (s, i) -> System.out.println(i + ": " + s)));
Résultat d'exécution
1: a
2: b
3: c
4: d
[Attention] Lorsque vous exécutez en parallèle dans un flux, veuillez concevoir comme utiliser forEachOrdered.
c'est tout
Recommended Posts