Alguien sabe cómo lograr el siguiente código de pieza en una forma de Java 8, respectivamente, ¿hay algún método de flujo para detectar el primer elemento en un forEach?
List<String> myList = new ArrayList<String>(); myList.add("A"); myList.add("B"); int i = 0; for (final String value : myList) { if (i == 0) { System.out.println("Hey that's the first element"); } System.out.println(value); i++; }Java8:
myList.stream().forEach(value -> { // TODO: How to do something special for first element? System.out.println(value); });Además, digamos que el objetivo es el siguiente (salida de la consola):
A Something special B C D E F¿Puede esto funcionar para usted?
myList.stream().findFirst().ifPresent(e -> System.out.println("Special: " + e)); myList.stream().skip(1).forEach(System.out::println);Producción:
Special: A BAlternativa:
myList.stream().findFirst().ifPresent(e -> somethingSpecial(e)); myList.stream().forEach(System.out::println);No creo que haya algo proporcionado en stream.
Hay varias alternativas que puede considerar:
Método 1:
int[] i = {0}; // I am using it only as an int holder. myList.stream().forEach(value -> { if (i[0]++ == 0) { doSomethingSpecial; } System.out.println(value); });Método 2:
Si su lista es rápida para el acceso aleatorio (por ejemplo, ArrayList ), puede considerar:
IntStream.range(0, myList.size()) .forEach(i -> { ValueType value = myList.get(i); if (i == 0) { doSomethingSpecial(); } System.out.println(value); });