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