1. 程式人生 > 其它 >java8 stream map和flatMap

java8 stream map和flatMap

技術標籤:javajava

map
定義:

/**
 * 對映 
 * @param mapper 轉換邏輯 T->R
 * @return 一個新的流
 * */
<R> Stream<R> map(Function<? super T, ? extends R> mapper);

元素轉化,可以將流轉成另一種型別的流。
示例:

List<String> strs = Arrays.asList("1", "23");
List<Integer> integers = strs.stream
() .map(s -> Integer.parseInt(s)) .collect(Collectors.toList()); //[1, 23]

mapToInt
定義:

/**
 * 對映成int
 * @param mapper 轉換邏輯 T->int型別的值
 * @return int流
 * */
IntStream mapToInt(ToIntFunction<? super T> mapper);

接收將成員變數轉化成int的方法,返回int流,可以用於統計。
示例:

//統計總數
Integer sum = integers.
stream().mapToInt(Integer::intValue).sum(); //24 Integer sum2 = integers.stream().mapToInt(i -> i.intValue()).sum();//24 Integer sum3 = strs.stream().mapToInt(str -> Integer.parseInt(str)).sum();//24

flatMap

/**
 * 扁平化,將多層流合併成一層處理
 * 適用於多重迴圈統計
 * @param mapper 轉換邏輯 T->int型別的流
 * @return int流
 * */
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
Map<String, List<Integer>> map = new HashMap<>();
        map.put("aaa", integers);
        map.put("bbb", integers);
map.values().stream()
                //迴圈,元素是list,將list轉換成流
                .flatMap(list -> list.stream())
                //將所有元素的流和並後操作
                .forEach(i -> System.out.println(i));

在這裡插入圖片描述

flatMapToInt
定義:

/**
 * 扁平化,將多層int流合併成一個int流
 * 適用於多重迴圈統計
 * @param mapper 轉換邏輯 T->int型別的流
 * @return int流
 * */
IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper);

示例:


Integer sums = map.values().stream()
        //一層迴圈,元素是list,將list轉換成int流
        .flatMapToInt(list -> list.stream()
                //二層迴圈,元素是Integer
                .mapToInt(Integer::intValue))
        .sum(); //48