Erste Teilliste aus einer Java-Liste mit N-TEN Elemente, die die Bedingung erfüllt mit streams

Ich habe einen sehr einfachen Anwendungsfall

Gegeben eine Liste von Buchstaben, die mit A und Bs, ich möchte, um die Unterliste enthält die ersten N-Bs Beispiel:

  • f(3, [A A A B A B A B A A B]) = [A A A B A B A B]
  • f(2, [A A A B A B A B A A B]) = [A A A B A B]
  • f(1, [A A B A B A B]) = [A A B]
  • f(0, [A A B A B]) = []

Durch folgenden Imperativ Ansatz, das ist relativ einfach, zählen Sie bis finden wir N Bs, und dann bekommen die Teilliste, bis diese position.

Allerdings, ich konnte nicht finden eine funktionale Lösung mit Lambda-Ausdrücke, die seit der operation an jedem node zu sein scheint unabhängig von den anderen (was ich denke, Sinn für Parallelisierung).

Was meinst du mit funktionale Lösung mit lambdas? Sprechen Sie über streams? Können Sie uns einige pseudo-code, lassen Sie uns wissen, was Sie nach sind?
Ich möchte nur code mit Bächen, dass der folgende Imperativ-Funktion:
private List<String> getSubList(int maxAmount, List<String> inputList) { ArrayList<String> result = new ArrayList<String>(); int itemsFound = 0; for (String item : inputList) { result.add(item); if (item.equals("B")) itemsFound++; if (itemsFound == maxAmount); break; } return result; }
Warten Sie, bis Java 9 und Stream#takeWhile. Aber Ihre Logik verlangt eine stateful-Prädikat, das wird immer ein Stolperstein sein.

InformationsquelleAutor user3483969 | 2015-08-31

Schreibe einen Kommentar