JAVA 8 使用 Lambda 用法时报错,有谁知道怎么解决么?

public class ListErr
{
public static void main(String[] args)
{
// 创建一个只想保存字符串的List集合
List strList = new ArrayList();
strList.add("疯狂Java讲义");
strList.add("疯狂Android讲义");
// "不小心"把一个Integer对象"丢进"了集合
strList.add(5); // ①
strList.forEach(str -> System.out.println(((String)str).length())); // ②
}
}

代码图如下:
图片说明

一直有这个问题,不知道是为什么,有谁知道么?

图片说明

这种写法应该是正确的,最后找到了方法,直接在cmd窗口中,运行Java 类名,就可以正常运行,也不会报错,MyEclipse 和 eclipse 运行都不行的

编译器用的是java 8么,str是否需要定义类型(虽然C#不需要,但是java不是很确定,你查下)

lambda body 代码是否要加 { }

要加{}, ->右侧是表达式或者一个值的时候不需要加{}

这种写法应该是正确的,最后找到了方法,直接在cmd窗口中,运行Java 类名,就可以正常运行,也不会报错,MyEclipse 和 eclipse 运行都不行的

在Lambda标准格式的基础上,使用省略写法的规则为:
1. 小括号内参数的类型可以省略;
2. 如果小括号内有且仅有一个参数,则小括号可以省略;
3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。

箭头要写对减号大于号 ->