关于 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

回到顶部