Java forEach遍历问题

spockliu 2016-06-01 10:23:51
本人为JAVA初学者,疯狂JAVA讲义里面有一部分讲到Lambda表达式遍历集合的时候有如下代码:


import java.util.*;

public class CollectionEach {
public static void main(String[] args) {
Collection books = new HashSet();
books.add("语文");
books.add("数学");
books.add("物理");
books.forEach(obj -> System.out.println("迭代集合元素: " + obj));
}
}


报出如下错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
obj cannot be resolved to a variable
Syntax error on token "-", -- expected
obj cannot be resolved to a variable

at crazyJava.CollectionEach.main(CollectionEach.java:11)


JAVA 版本如下:

C:\Users\Spock>java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

本人有确认过代码无误,也在网上找到Lambda也确实是有这种遍历方法。
...全文
498 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
OSCAR_chen_0317 2016-06-12
  • 打赏
  • 举报
回复
jdk版本问题
securitit 2016-06-08
  • 打赏
  • 举报
回复
楼上各位的大神们,往点上说啊::: 无论是Eclipse还是MyEclipse本身都自己的JDK编译版本的,光是把项目里的JDK版本调整到1.8只是影响编译后运行时,编译还得自己修改MyEclipse的编译器JDK版本: 右键项目->Properties->Java Compiler 更改就可以了 当然前提是你的MyEclipse版本得支持高版本的JDK
spockliu 2016-06-08
  • 打赏
  • 举报
回复
引用 10 楼 huntor 的回复:
javac -version 输出是什么
以下为输出结果。 java version "1.8.0_77" Java(TM) SE Runtime Environment (build 1.8.0_77-b03) Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode) 在myEclipse运行就有问题,并且我已经设置项目JAVA版本为1.8. 手动编辑就没有问题。我估计还是myEclipse的设置有些问题。
huntor 2016-06-04
  • 打赏
  • 举报
回复
huntor 2016-06-04
  • 打赏
  • 举报
回复
javac -version 输出是什么
lyfuci 2016-06-04
  • 打赏
  • 举报
回复
我复制了你的代码,然而并没有错,不过会有泛型警告。估计真的是编译的jdk设置错误,你是怎么检查的啊。
spockliu 2016-06-04
  • 打赏
  • 举报
回复
我已经设定项目JDK版本为1.8,但还是有这个错误产生。
Edocevol 2016-06-02
  • 打赏
  • 举报
回复
系统的jdk,不一定是你项目的jdk
爱睡觉的阿狸 2016-06-02
  • 打赏
  • 举报
回复
这种Lambda在当前的企业中几乎没人用,而且很多公司的jdk都是1.6版本甚至更低的呢。 所以楼主不用太纠结这个问题。
  • 打赏
  • 举报
回复
没见过这么写的,很显然obj都没有去定义
imfang 2016-06-02
  • 打赏
  • 举报
回复
引用 楼主 spockliu 的回复:
本人为JAVA初学者,疯狂JAVA讲义里面有一部分讲到Lambda表达式遍历集合的时候有如下代码:


import java.util.*;

public class CollectionEach {
	public static void main(String[] args) {
		Collection books = new HashSet();
		books.add("语文");
		books.add("数学");
		books.add("物理");
		books.forEach(obj -> System.out.println("迭代集合元素: " + obj));
	}
}
报出如下错误: Exception in thread "main" java.lang.Error: Unresolved compilation problems: obj cannot be resolved to a variable Syntax error on token "-", -- expected obj cannot be resolved to a variable at crazyJava.CollectionEach.main(CollectionEach.java:11) JAVA 版本如下: C:\Users\Spock>java -version java version "1.8.0_77" Java(TM) SE Runtime Environment (build 1.8.0_77-b03) Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode) 本人有确认过代码无误,也在网上找到Lambda也确实是有这种遍历方法。
在Eclipse中测试代码可以运行~~~,java也是1.8版本的~
  • 打赏
  • 举报
回复
books.forEach(obj -> System.out.println("迭代集合元素: " + obj)); 拉姆达表达式是JDK1.8版本的新特性。1.8以下不支持的
  • 打赏
  • 举报
回复
Syntax error on token "-", -- expected 符号语法错误,没有“-”这个符号
ryelqy 2016-06-01
  • 打赏
  • 举报
回复
参考代码如下:

Set<String> books = new HashSet<String>();
        books.add("语文");
        books.add("数学");
        books.add("物理");
        for(String a:books){
        	System.out.println(a);
        }

62,624

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧