Variable used in lambda expression should be final or effectively final

自从用了JDK8 的流操作之后,就上瘾了,真是太方便了。
但是今天做过滤的时候遇到了一个问题,向集合中添加对象的时候判断此对象是否已经存在。
用表达式过滤,结果竟然报错了
Variable used in lambda expression should be final or effectively final_第1张图片向集合中插入服务器对象,如果已经存在了这个ip了,就抛异常。

开始想用lamdba,但是编译报错 Variable used in lambda expression should be final or effectively final
所以只能重写equals 比较ip了

原因
Lambda 表达式引用的是值,而不是变量.所以在lamdba和匿名内部类中使用变量不能被改变

如果你试图给该变量多次赋值,然后在 Lambda 表达式中引用它,编译器就会报错,典型的就是在for循环里使用lamdba了,如果你需要用到for循环的i变量,那么lamdba是不合适的
Variable used in lambda expression should be final or effectively final_第2张图片

你可能感兴趣的:(遇到的问题)