【问题标题】:How to store string value in local variable using java stream [duplicate]如何使用java流将字符串值存储在局部变量中[重复]
【发布时间】:2019-12-24 07:15:11
【问题描述】:

我正在使用 java 8 流功能,现在我想将字符串值存储在局部变量中,但它显示 local variables referenced from a lambda expression must be final or effectively final。我也尝试了 final 关键字,它变得相同。我需要澄清它是否可能。

public static void main(String[] args) {
        List list = Arrays.asList("java", "stream", "scala");
        String data = "";
        list.forEach(action -> {
            data = action.toString();
            System.out.println("data :" + data);
        });
    } 

【问题讨论】:

  • 你需要 data 在 lambda 之外?看来您可以删除变量
  • 即使有可能,又有什么意义呢?你用列表的每个元素覆盖data 的值,所以它最后会有最后一个元素。你想连接所有这些Strings 吗?如果你这样做了,还有其他方法可以实现这一点。
  • 是的,我需要在 lambda 之外。无论我存储在列表中。例如:data=java
  • 显示你在 lambda 之外使用 data 所做的事情
  • 你想用那个变量做什么? @AjithDeivam 以及为什么

标签: java java-8 java-stream


【解决方案1】:

如果你尝试重新初始化最终变量,它会抛出错误。

我建议你使用 arraylist/list/array 作为 final 并添加 value 到 list ,示例如下

final ArrayList<String> strings = new ArrayList<>();
        List list = Arrays.asList("java", "stream", "scala");
        list.forEach(action -> {
            strings.add(action.toString());

        });

【讨论】:

    【解决方案2】:
    List<String> list = Arrays.asList("java", "stream", "scala");
    StringBuilder data = new StringBuilder();
    list.forEach(action -> {
        data.replace(0, data.length(), action);
        System.out.println("data :" + data);
    });
    
    
    Although I **don't** recommend it.
    
    
    

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      相关资源
      最近更新 更多