Java 8 wird für jede erste index

Jemand weiß, wie das zu erreichen ist Folgendes Stück code in einer Java-8-Wege-beziehungsweise gibt es irgendeine stream-Methoden zu erkennen, das erste element in einer 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);
});

Darüber hinaus lassen Sie ' s sagt, dass das Ziel der folgenden (console output):

A    Something special
B
C
D
E
F
  • Tun Sie etwas bestimmtes für ein element wäre einfacher (und besser geeignete) mit nur doSomethind(list.get(0)) + loop/Strom für die ganze Liste.
  • no ned um eine Schleife oder auch streamen, für immer nur der 1. elememt. das element mit dem index 0
  • Fügen Sie eine Ausgabe in der Konsole mockup, um zu versuchen zu erklären, warum das erste element hat, um erkannt zu werden
  • Verwenden Sie ein IntStream aber dann eher ein Duplikat (eine Kopie) Java-8 forEach mit dem index 😉
  • Java8-streams sind Teil der funktionalen Programmierung-Einrichtungen in der JVM. Als solche Betrieb in einem stream sollte stateless sein, aber zu unterscheiden zwischen der ersten oder jedes andere element ist ein Zustand. Also die streams-API ist das falsche Werkzeug für das, was Sie tun möchten.
  • Dies ist nicht wirklich geeignet, um mit streams und forEach-Schleife, die dazu bestimmt sind, in Fällen, in denen der Umgang mit alle Elemente sind homogen. Jede Lösung, die Sie kommen könnte wäre sehr künstlich und würde wahrscheinlich brechen, sobald man versucht es mit einem parallelen stream. In anderen Worten, verwenden Sie ein for Schleife.
  • umformulieren von meinem Kommentar... verwenden Sie ein IntStream wenn Sie wirklich denken, Sie brauchen eine Stream hier... ansonsten... nicht?
  • erste forEach muss ersetzt werden mit forEachOrdered. Was dann passiert, wenn Sie Strom aus einem Set? Es gibt keine Garantien, die erste ist tatsächlich die erste. Die meisten richtigen Weg, es zu tun, würde sein, mit Blick auf die absoluten muss-Lesen Sie hier die Antwort Holger : stackoverflow.com/questions/27547519/...; das ist die Verwendung eines benutzerdefinierten Spliterator.
  • Guter Punkt, @Eugene, thx für den input, absolut
  • Iterator<String> i=myList.iterator(); if(i.hasNext()) System.out.println("first: " + i.next()); i.forEachRemaining(System.out::println);
  • das ist genau das, was ich dachte. Würden Sie hinzufügen, dass, als eine option, um die Antworten?

Schreibe einen Kommentar