Sobes.tech
Junior — Middle

Чӣ фарқият байни усулҳои map ва flatMap дар Java Stream API ва хусусиятҳои истифодаи онҳо чист?

sobes.tech AI

Ҷавоб аз AI

Методҳои map ва flatMap дар API Stream-и Java барои табдил додани унсурҳои ҷараён истифода мешаванд, аммо онҳо ба таври гуногун кор мекунанд:

  • map функсияро қабул мекунад, ки ҳар як унсури ҷараёнро ба унсури дигар табдил медиҳад. Натиҷа ҷараён бо ҳамон шумораи унсурҳо, аммо бо навъи ё намуди дигар мегардад.

  • flatMap функсияро қабул мекунад, ки ҳар як унсурро ба ҷараёни (Stream) унсурҳо табдил медиҳад ва сипас ҳамаи ин ҷараёнҳоро ("филтрашавӣ") ба як ҷараёни умумӣ мепайвандад. Ин барои он муфид аст, ки аз як унсур чанд унсур ба даст овардан лозим аст.

Масалан:

List<String> words = Arrays.asList("hello", "world");

// map: ҳар калимаиро ба дарозии он табдил медиҳем
List<Integer> lengths = words.stream()
    .map(String::length)
    .collect(Collectors.toList()); // [5, 5]

// flatMap: ҳар калимаро ба ҳарфҳо тақсим мекунем ва ҳамаи ҳарфҳоро дар як ҷараён мепайвандем
List<String> letters = words.stream()
    .flatMap(word -> Arrays.stream(word.split("")))
    .collect(Collectors.toList()); // [h, e, l, l, o, w, o, r, l, d]

Хусусиятҳои истифода:

  • map барои табдилоти оддӣ, ки ҳар унсур ба унсури дигар табдил меёбад, мувофиқ аст.
  • flatMap вақте зарур аст, ки аз як унсур чанд унсур ба даст овардан лозим аст ва структураҳои дарунсохтро "филтрашавӣ" кардан лозим аст.