如何使用lambda在字符串列表的某些元素中执行子字符串

Pav*_*van 2 java foreach lambda java-stream

下面是我的String列表.

["sunday", "monday", "tuesday", "wednesday", "fri", "satur"]
Run Code Online (Sandbox Code Playgroud)

我想要做删除"天"从元素;如果它与"天"的结局.如何在Lambda中做到这一点?

列表中的预期输出:

["sun", "mon", "tues", "wednes", "fri", "satur"]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码,但无法将值分配给列表

daysList.stream().forEach(s -> { if(s.endsWith("day")) {
        s = s.substring(0, s.indexOf("day"));
    }});
Run Code Online (Sandbox Code Playgroud)

有人可以帮我这个吗?

VGR*_*VGR 10

这里的大多数答案都使用Stream,但你根本不应该使用Stream:

daysList.replaceAll(s -> s.replaceFirst("day$", ""));
Run Code Online (Sandbox Code Playgroud)


TNT*_*TNT 6

使用流迭代forEach不起作用; 您需要使用将您修改的每个元素映射到新流map.然后,您可以将结果收集回列表.

daysList = daysList.stream()
        .map(s -> s.endsWith("day") ? s.substring(0, s.length()-3) : s)
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)