方法概述
方 法 | 描 述 |
---|---|
map(Function f) | 接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。 |
mapToDouble(ToDoubleFunction f) | 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 DoubleStream。 |
mapToInt(ToIntFunction f) | 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 IntStream。 |
mapToLong(ToLongFunction f) | 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 LongStream。 |
flatMap(Function f) | 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流 |
测试代码
TestStreamMap.java
package java8.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;import java.util.function.IntToDoubleFunction;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;
import org.junit.Test;
/**
* @author 微信公众号:JavaWeb架构师
* @version 创建时间:2017年12月28日 上午9:21:02
*/
public class TestStreamMap {
/**
* 1.映射:
* map(Function f) 接收一个函数作为参数,该函数会被应用到每个元素上,
* 并将其映射成一个新的元素。
* mapToDouble(ToDoubleFunction f) 接收一个函数作为参数,该函数会被应用到每个元素上,
* 产生一个新的 DoubleStream。
* mapToInt(ToIntFunction f) 接收一个函数作为参数,该函数会被应用到每个元素上,
* 产生一个新的 IntStream。
* mapToLong(ToLongFunction f) 接收一个函数作为参数,该函数会被应用到每个元素上,
* 产生一个新的 LongStream。
* flatMap(Function f) 接收一个函数作为参数,将流中的每个值都换成另一个流,
* 然后把所有流连接成一个流
*/
// 1.map:将集合中的每一个元素映射成另一个元素(keys-values)
@Test
public void test1() {
List<String> listStr = Arrays.asList("aaa","bbb","ccc","ddd","eee");
/**
* <R> Stream<R> map(Function<? super T,? extends R> mapper):
* 返回由给定函数应用于此流的元素的结果组成的流。
* 这是一个intermediate operation 。
* 参数类型
* R - 新流的元素类型
* 参数
* mapper -一个 non-interfering , stateless函数应用到每个元件
* 结果
* 新的流
*/
// 将每一个字符串都转换为大写
Stream<String> map = listStr.stream().map((str)->str.toUpperCase());
map.forEach(System.out::println);
}
// 2.mapToDouble
@Test
public void test2() {
int[] intArray = {1,2,3,4,5,6,7};
/**
* DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper):
* 返回一个DoubleStream ,其中包含将给定函数应用于此流的元素的结果。
* 这是一个intermediate operation 。
* 参数
* mapper -一个 non-interfering , stateless函数应用到每个元件
* 结果
* 新的流
*/
// 把整型数组映射为double流,自身值 + 1.1
DoubleStream mapToDouble = Arrays.stream(intArray).mapToDouble((a) -> a+1.1);
mapToDouble.forEach(System.out::println);
}
// 3.flatMap:
@Test
public void test3() {
List<String> listStr = Arrays.asList("aaa","bbb","ccc","ddd","eee");
/**
* <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper):
* 返回由通过将提供的映射函数应用于每个元素而产生的映射流的内容来替换该流的每
* 个元素的结果的流。 每个映射的流在其内容被放入此流之后是closed 。
* (如果映射的流是null则使用空的流)。
* 这是一个intermediate operation 。
* API Note:
* flatMap()操作具有对流的元素应用一对多变换,然后将所得到的元素平坦化为新流的效果。
* 参数类型
* R - 新流的元素类型
* 参数
* mapper -一个 non-interfering , stateless功能应用到其产生新的值的流的每个元素
* 结果
* 新的流
*/
// 把所有字符串都转换成对应的Character Stream,再将所有的Character Stream连接成一
// 个Character Stream
Stream<Character> flatMap = listStr.stream().flatMap(TestStreamMap::strToCharacterStream);
flatMap.forEach(System.out::println);
}
// 把String转换成Character Stream
public static Stream<Character> strToCharacterStream(String str) {
List<Character> listCharacter = new ArrayList<>();
// 把每个字符添加到集合中去
for (Character aux : str.toCharArray()) {
listCharacter.add(aux);
}
// 返回Character流
return listCharacter.stream();
}
}
其它
- 源码下载
关注下方公众号,回复:Java8.code
欢迎加入交流群:451826376
更多信息:www.itcourse.top