Hirdetés

Új hozzászólás Aktív témák

  • Sirpi
    senior tag

    Egy kis stream alap...

    A végrehajtásban a .map upperCase -ként fűzi, adja tovább a stream elemet. Ez eddig érthető(számomra). Az .anyMatch -nél nem értem, hogy a kiértékelt boolean eredmény mit jelent. A következő stream ciklusban megint az eredeti következő stream elem lesz manipulálva.
    Hogy is van ez?

        Stream.of("d2", "a2", "b1", "b3", "c")
            .map(s -> {
                System.out.println("map: " + s);
                return s.toUpperCase();
            })
            .anyMatch(s -> {
                System.out.println("anyMatch: " + s);
                return s.startsWith("A");
            });
        // map:      d2
        // anyMatch: D2
        // map:      a2
        // anyMatch: A2    

    A stream-et egy iterátorként fogd fel, és a benne lévő lépések végrehajtódnak minden elemre.
    Tehát minden elemre végre fog hajtódni először az upperCase, ami nagybetűsít. Ennek az eredménye megy át elemenként az anyMatch-be, ami megnézi, hogy az adott elem A betűvel kezdődik-e. Az anyMatch egy terminal operátor, vagyis zárja a stream-et, további lépést nem tudsz hozzáfűzni. A visszatérési értéke boolean:

    boolean anyMatch(Predicate<? super T> predicate)

    Tehát az egész stream kiértékelés eredménye egy true/false érték, és true akkor, ha valamelyik elem nagybetűsítve A-val kezdődik. Az első sor elejére ezt is írhatod:

    boolean existsWithA = Stream.of("d2", "a2", "b1", "b3", "c")...

    És jelen esetben ez true-t fog visszaadni, de ha az a2-t kiszeded, akkor false-t.

Új hozzászólás Aktív témák