Sobes.tech
Middle
166

_To_Function сияқты функционалды интерфейстер не үшін қажет?

AI-дан жауап

sobes.tech AI

Java-дағы функционалды интерфейстер (java.util.function пакетінен) лямбда-экспрессиялар мен әдіс сілтемелерін қолдау үшін қажет, олар функционалды бағдарламалауды жүзеге асыруға мүмкіндік береді.

To...Function тобына жататын интерфейстер (мысалы, ToIntFunction, ToLongFunction, ToDoubleFunction) кез келген типтегі аргументті қабылдайтын және примитивті типтегі мәнді қайтаратын функционалды интерфейстер болып табылады (int, long, double).

Олардың негізгі мақсаты:

  1. Примитивті типтер үшін тиімділік: Примитивті типтермен жұмыс істегенде автоматты орау/ашу (boxing/unboxing) болдырмау. Бұл өнімділікті арттырады және Function<T, Integer>, Function<T, Long>, Function<T, Double> қолдануға қарағанда жадыны аз пайдаланады.
  2. Stream API-да қолдану: Олар ағындарда (Stream API) түрлендіру операцияларында кеңінен пайдаланылады, мұнда нәтиже примитивті типте болады, мысалы, mapToInt, mapToLong, mapToDouble әдістерінде.
  3. Мақсатты нақты көрсету: ToIntFunction қолдану операцияның бүтін санды қайтаратынын нақты көрсетеді, бұл кодты оқуға оңай әрі болжамды етеді.

ToIntFunction-ды Stream API-да қолданудың мысалы:

// Жолдар ағынын әр жолдың ұзындығын көрсететін бүтін сандар ағынына айналдырады
List<String> strings = List.of("hello", "world", "java");
ToIntFunction<String> lengthFunction = s -> s.length();

List<Integer> lengths = strings.stream()
                             .mapToInt(lengthFunction) // ToIntFunction пайдаланылады
                             .boxed() // IntStream-ті қайтадан Stream<Integer>-ға айналдырады
                             .collect(Collectors.toList());

ToIntFunction және mapToInt қолданылмаса, map(s -> Integer.valueOf(s.length())) қолдануға тура келер еді, ол әр нәтиженің оралуына әкеледі.