lambda表达式访问不了外部的变量,这种时候怎么用for语句呢?

cjwddxlb 2017-11-02 10:40:27
我本来的意图是这个
for(i=1;i<=10;i++)
{
System.out.println("Sum of it is"+Data.mapValues(
(Function<PsData, String>) psData -> psData.element(i)
).values().countByValue());
}
或者用内部类是这样
for(i=1;i<=10;i++)
{
System.out.println("Sum of it is"+Data.mapValues(
new Function<PsData, String>() {
@Override
public Object call(PsData psData) throws Exception {
return psData.element(i);
}
}
).values().countByValue());
}
但是报错说i必须是final的或实质final的。
把psData -> psData.element(i)改成psData -> psData.element(1)或者2,3,4....就没有问题

难道这种情况下我就只能把这段代码抄10遍吗....?心情很崩溃啊。。。
...全文
736 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
傻傻de点点 2017-11-03
  • 打赏
  • 举报
回复

for(int i=1;i<=10;i++) {
    final int fi = i;
    System.out.println("Sum of it is"+Data.mapValues(
        new Function<PsData, String>() {
            @Override
            public Object call(PsData psData) throws Exception {
                return psData.element(fi);
            }
    }).values().countByValue());
}
傻傻de点点 2017-11-03
  • 打赏
  • 举报
回复

for (int i = 1; i <= 10; i++) {
    final int fi = i;
    System.out.println("Sum of it is" + Data.mapValues(
            (Function<PsData, String>) psData -> psData.element(fi)).values().countByValue());
}

62,614

社区成员

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

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