Kommissionierung Elemente einer Liste, bis die Bedingung erfüllt ist mit Java 8-Lambdas

Ich versuche, um meine Meinung zu glauben, dass die funktionelle Art und Weise und vor kurzem konfrontiert, eine situation, in die ich brauchte, um abholen Elemente aus einer Liste aus, bis eine Bedingung erfüllt ist, und ich konnte nicht finden einen einfachen, natürlichen Weg, dies zu erreichen. Offensichtlich bin ich immer noch lernen.

Sagen, dass ich diese Liste:

List<String> tokens = Arrays.asList("pick me", "Pick me", "pick Me",
    "PICK ME", "pick me and STOP", "pick me", "pick me and Stop", "pick me");

//In a non lambdas was you would do it like below
List<String> myTokens = new ArrayList<>();
for (String token : tokens) {
    myTokens.add(token);
    if (token.toUpperCase().endsWith("STOP")) {
        break;
    }
}

Vielen Dank im Voraus für Eure inputs

HINWEIS:
Vor der Veröffentlichung dieses lese ich Limit ein Strom durch ein Prädikat, aber ich konnte nicht sehen, wie ich das anpassen kann, dass die Antwort auf mein problem. Jede Hilfe wäre geschätzt danke.

  • Ich habe gelesen, dass die Frage vorher veröffentlichte ich meine, aber ich dachte und denke immer noch, dass java würde einiges aus der box, dies zu erreichen. Etwas sagen wie myTokens = tokens.stream().collect(toListWhile(...)) Oder eine schöne und einfache Möglichkeit für die Umsetzung toListWhile() benutzerdefinierte collector
  • Ich glaube nicht, dass es ein einzelner Betrieb in die Streams API, die würden davon ausgehen, geordneter Strom, und nicht für eine ungeordnete einem. So ist Ihr Betrieb vorstellen.
  • mögliche Duplikate von Limit ein Strom durch ein Prädikat
  • Dies ist nicht eine exakte Kopie, wie hier der OP will das STOP-element als auch. Es ist ein etwas anderes problem.
  • takeWhile ist eigentlich so etwas wie dieses. JavaDoc-statement für ungeordnete streams ist besonders schön! Eine beliebige Teilmenge, sic! Meiner Meinung nach wäre es wirklich besser, wenn er eine exception wirft...
  • Ah, also sind Sie wieder hinzufügen---viele, wenn diese waren geplant, vor dem release von Java 8, aber dann fallen gelassen. Java hat in der Regel fail-fast-Semantik im Gegensatz zu GIGO. Dies ist sicher zum generieren einer Menge von sprachlos, SO Fragen.
  • Es ist eine gute und interessante Frage, aber ich Stimme nicht mit seiner Prämisse. Ich glaube nicht, dass streams sind inteded verwendet werden, für das, was Sie versuchen, Sie zu benutzen. Vor allem, weil Ihr Betrieb hängt von den stream bestellt und, höchstwahrscheinlich, nicht parallelisiert. Was ich denke, Sie tun sollten, ist manuell (stream-weniger) bauen Sie eine gültige Sammlung und dann zu streamen, um es zu verarbeiten.

InformationsquelleAutor Julian | 2015-08-29
Schreibe einen Kommentar