Lambdy w Javie

Odpowiedz Nowy wątek
2017-08-31 11:19
0

Jaka jest używalnośc lambd a javie? Mamy taki kod(tak lambdy w pythonie nie są najlepszym przykładem, ale...):

x = ["Abba was is a band from Sweden", "Cats", "Jolly Roger Pirate"]
    print(list(map(lambda x: x.lower(),x))) # -> ['abba is a band from sweden', 'cats', 'jolly roger pirate']

Czy jest jakaś droga do podobnego kodu w javie?


edytowany 2x, ostatnio: lion137, 2017-08-31 12:09

Pozostało 580 znaków

2017-08-31 11:38
1

Będzie coś w stylu:

Stream.of(x).map(String::toLowerCase).forEach(System.out::println);

Nie pomagam przez PM. Pytania zadaje się na forum.

Pozostało 580 znaków

2017-08-31 11:48
0

Dzięks, yhm, a co to jest to, co zwraca: java.util.stream.ReferencePipeline, to po prostu stream ? Mozna tam używać inne HOF? W miejsce toLowerCase, można dać dowolną funkcję?


Pozostało 580 znaków

2017-08-31 12:05

Bardziej podobne do Python i do tego co jest we wszystkich normalnych językach jest VAVR http://www.vavr.io/.
I to Ci polecam. Stream z java.util. to troszkę obciążone dziedzicznie API, z którego raczej jest sens korzystać tylko jak gdzieś walczysz o "cykle" na mutowalnych kolekcjach. (Normalnie nieczęsto ).

A twój przykład wygląda wtedy tak:

import javaslang.collection.List;

[...]
  public static void main(String[] args) {
        List<String> x = List.of("Abba was is a band from Sweden", "Cats", "Jolly Roger Pirate");
        System.out.println(x.map( String::toLowerCase));//z method reference
        System.out.println(x.map( s ->s.toLowerCase())); //kanonicznie
    }

Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 3x, ostatnio: jarekr000000, 2017-08-31 12:17

Pozostało 580 znaków

2017-08-31 12:15
1
lion137 napisał(a):

Mozna tam używać inne HOF? W miejsce toLowerCase, można dać dowolną funkcję?

Można używać innych HOF, a jak mamy stream.map to przekazujemy instacje Function który z jakiegoś obiektu typu T robi obiekt typu V (oczywiście T i V mogą być w szczególności te same)


Nie pomagam przez PM. Pytania zadaje się na forum.

Pozostało 580 znaków

2017-08-31 14:09
1

@lion137: to co napisałeś w pythonie to trochę abominacja i nie zaleca sie stosowania w ten sposób bezpośrednio map czy filter i zamiast tego robić:

[x.lower() for x in collection]

bo list comprehension wygodniej sie jednak czyta ;) W javie wygląda to lepiej jak masz więcej niż jedno wywołanie np.

List<T> result = data.stream()
    .map(x -> fun1(x))
    .map(x -> fun2(x))
    .map(x -> fun3(x))
    .map(x -> fun4(x))
    .filter(x -> predicate1(x))
    .filter(x -> predicate1(x))
    .filter(x -> predicate1(x))
    .filter(x -> predicate1(x))
    .collect(Collectors.toList());

Zapisanie tego samego w pythonie za pomocą list comprehension byloby masakrą, a z użyciem map() i filter() niewiele lepiej.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0