返回 | 调用 |
---|---|
<R> Stream<R> | map(Function<? super T,? extends R> mapper) |
参数是Interface Function<T,R>
对象,(需要手动实现Function
接口的apply(T t)
方法返回类型为R
)
? super T
是输入的类型
? extends R
明确了返回类型为R
1.内部类实现方式,写法一:匿名内部类
这里Function
的泛型<T,R>
变成了<String,String>
重写了apply
方法,参数类型T
变成了String
,返回值类型R
也变成了String
public static void main(String[] args) throws IOException {
List<String> list1 = Arrays.asList("1","2","3");
list1.stream().map(
new Function<String, String>() {
@Override
public String apply(String s) {
s += s;
return s;
}
}
).forEach(System.out::println);
}
2.内部类实现方式,写法二:内部类
public static void main(String[] args) throws IOException {
List<String> list1 = Arrays.asList("1","2","3");
list1.stream().map(
new Fun()
).forEach(System.out::println);
}
//实现接口时,泛型是写在接口上
static class Fun implements Function<String,String>{//为什么要加static
@Override
public String apply(String s) {
s += s;
return s;
}
}
3.使用lambda
lambda
的本质就是Function
内部类
public static void main(String[] args) throws IOException {
List<String> list1 = Arrays.asList("1","2","3");
list1.stream().map(
x -> x+=x
).forEach(System.out::println);
}