java8 stream map和flatMap
阿新 • • 發佈:2020-12-21
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