【问题标题】:Why does my list not change with lambda? [duplicate]为什么我的列表不随 lambda 变化? [复制]
【发布时间】:2017-08-21 19:00:33
【问题描述】:

我有以下简单的方法:

public void exercise2(List<String> list) {
    list.stream().filter(s -> s.length() % 2 == 0).collect(Collectors.toList());
  }

还有简单的测试,没有成功完成:

@Test
  public void testExercise2() {
    Lesson1 lesson1 = new Lesson1();
    List<String> list = new ArrayList<>(Arrays.asList("alpha", "bravo", "charlie", 
                                                      "delta", "echo", "foxtrot"));
    List<String> inputList = new ArrayList<>(list);
    lesson1.exercise2(list);
    assertEquals("Input " + inputList.toString(), Arrays.asList("echo"), list);
  }

【问题讨论】:

  • 流从不修改原始列表。
  • 就这样做list = list.stream().filter(s -&gt; s.length() % 2 == 0).collect(Collectors.toList());
  • 请包括您遇到的确切错误/故障。这将帮助人们确定原因和可能的解决方案。
  • @SLaks 但是当返回类型为 void 时如何更改列表?
  • 如果要修改列表,请尝试removeIf()

标签: java lambda


【解决方案1】:

流从不修改原始列表。

您的函数创建一个新列表,然后忽略它。

【讨论】:

  • 在收集器的javadoc 中,您可以找到使用collect 的示例。这是相关部分List&lt;String&gt; list = people.stream().map(Person::getName).collect(Collectors.toList());
  • 我不明白,如何更改输入数组列表:(
  • @Stefan 但这仍然不会修改列表:它只是为变量分配一个新值,一旦方法返回,该值就会被丢弃。
  • @AndyTurner 你知道我该如何解决这个问题吗?
  • @AndyTurner 我的错误,对不起。安迪,你是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 2021-01-16
相关资源
最近更新 更多