findAny orElse nach filter

Ich bin mit der Stream-filter findAny.orElse, aber es funktioniert nicht so, wie ich erwarte, so dass ich vermute, ich bin nicht zu verstehen, wie Sie wirklich funktioniert.
Hier mein code

return Stream.of(getObjectAttributeValue(product, matchCriteria.getFieldName()))
             .map(o -> isIngredientRestricted(matchCriteria, (List<String>) o))
             .filter(Boolean::valueOf)
             .findAny().orElse(isCommercialHierarchyInfoRestricted(product, matchCriteria));

Im Grunde, was ich erwartet hatte war, dass wenn die erste Karte, geben einen Boolean false, dann wird es filter, so dass dann die findAny würde nicht gefunden werden, alle optional, so dass die orElse würde aufgerufen werden. Aber auch mit einem wahren in den filter der isCommercialHierarchyInfoRestricted aufgerufen.

Irgendeine Idee, was ich falsch mache?

  • orElse aufgerufen wird, oder isCommercialHierarchyInfoRestricted aufgerufen wird?
  • .map(…).filter(Boolean::valueOf) sieht unsinnig. Warum nicht einfach .filter(…) in den ersten Platz, d.h. .filter(o -> isIngredientRestricted(matchCriteria, (List<String>) o))?
  • isCommercialHierarchyInfoRestricted aufgerufen. Vielleicht das größte problem hier ist, dass ich, sollten Sie nicht verwenden Stream
  • Oh, wie ich sehe. Sie möchten die boolean Ergebnis als das Gesamtergebnis.
InformationsquelleAutor paul | 2016-01-04
Schreibe einen Kommentar