Junior — Middle
Milline on erinevus meetodite map ja flatMap vahel Java Stream API-s ning millised on nende kasutusomadused?
sobes.tech AI
Vastus AI-lt
Java Stream API-s map ja flatMap meetodid on mõeldud voogude elementide teisendamiseks, kuid töötavad erinevalt:
-
mapvõtab funktsiooni, mis iga voogude elemendi teisendab teiseks elemendiks. Tulemuseks on voog sama arvu elementidega, kuid teistsuguse tüübi või välimusega. -
flatMapvõtab funktsiooni, mis iga elemendi teisendab vooguks (Stream) ning seejärel "lameerib" ("lameerib") kõik need voogud üheks ühiseks vooguks. See on kasulik, kui ühe elemendist soovitakse saada mitu elementi.
Näide:
List<String> words = Arrays.asList("hello", "world");
// map: teisendame iga sõna selle pikkuseks
List<Integer> lengths = words.stream()
.map(String::length)
.collect(Collectors.toList()); // [5, 5]
// flatMap: jagame iga sõna tähtedeks ja ühendame kõik tähed ühte voogu
List<String> letters = words.stream()
.flatMap(word -> Arrays.stream(word.split("")))
.collect(Collectors.toList()); // [h, e, l, l, o, w, o, r, l, d]
Kasutusomadused:
mapsobib lihtsate elementide ühekaupa teisendamiseks.flatMapon vajalik, kui ühe elemendist soovitakse saada mitu ja on vaja "lameerida" sisemisi struktuure.