关于 java8 中 stream 流的 map 方法的疑问?
各位大佬,为什么这里 map 里面 x->逻辑
这种写法就没有问题,而 x->{逻辑}
这种写法就会报错呢?
代码如下图:
这样会报错:
public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(3);
List<Future<String>> futures = new ArrayList<>();
System.out.println("32323223");
List<Integer> list = Arrays.asList(1, 2, 3);
List<String> collect = list.stream().map(x -> {
CompletableFuture.supplyAsync(() -> {
System.out.println("执行开始:" + new Date());
// 睡眠一秒,模仿处理过程
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行结束:" + new Date());
return new Date().toString();
}, executorService);
}
).map(CompletableFuture::join).collect(Collectors.toList());
executorService.shutdown();
System.out.println(collect);
System.out.println("77819");
}
这样不会:
public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(3);
List<Future<String>> futures = new ArrayList<>();
System.out.println("32323223");
List<Integer> list = Arrays.asList(1, 2, 3);
List<String> collect = list.stream().map(x ->
CompletableFuture.supplyAsync(() -> {
System.out.println("执行开始:" + new Date());
// 睡眠一秒,模仿处理过程
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行结束:" + new Date());
return new Date().toString();
}, executorService)
).map(CompletableFuture::join).collect(Collectors.toList());
executorService.shutdown();
System.out.println(collect);
System.out.println("77819");
}
回答:
因为你没 return 啊……
t -> t + 1;
是
t -> { return t + 1;
}
的缩写。你写成
t -> { t + 1;
}
当然不对了。
回答:
这里不是stream流的map方法的问题。 你的lambda表达式使用不对。如上面答主所说。去除'{}'即可。
回答:
- Lambda 表达式的基础语法 Java8引入了操作 “->” Lambda的操作符
- 左侧:Lambda表达式的参数列表
- 右侧:Lambda表达式中所需执行的功能,Lambda体
语法格式一:无参数,无返回值的模式
Runnable runnable = () -> System.out.println("hello lambda");
语法格式二:有参数,无返回值的模式。若左侧只有一个参数,小括号可以不写
Consumer<String> consumer = (x) -> System.out.println(x);
语法格式二:有两个以上的参数,有返回值的模式。并且lambda中有多条语句
Comparator<Integer> comparator = (x, y) -> { System.out.println("多条语句的Lambda的语句");
return Integer.compare(x, y);
};
语法格式二:有两个以上的参数,有返回值的模式。如果只有一条语句,可以简写如下
左侧的参数列表可以不用标识参数类型,因为jvm可以根据接口泛型去推断上下文的参数类型
Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
以上是 关于 java8 中 stream 流的 map 方法的疑问? 的全部内容, 来源链接: utcz.com/p/944570.html