Sobes.tech
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:

  • map võtab funktsiooni, mis iga voogude elemendi teisendab teiseks elemendiks. Tulemuseks on voog sama arvu elementidega, kuid teistsuguse tüübi või välimusega.

  • flatMap võ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:

  • map sobib lihtsate elementide ühekaupa teisendamiseks.
  • flatMap on vajalik, kui ühe elemendist soovitakse saada mitu ja on vaja "lameerida" sisemisi struktuure.