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

时间:2015-10-29 13:05:43

标签: java foreach lambda java-stream

下面是我的String列表。

["sunday", "monday", "tuesday", "wednesday", "fri", "satur"]

如果以" day"结尾,我想从元素中删除" day" 。如何在Lambda中做到这一点?

列表中的预期输出:

["sun", "mon", "tues", "wednes", "fri", "satur"]

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

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

有人可以帮我吗?

4 个答案:

答案 0 :(得分:7)

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

daysList.replaceAll(s -> s.replaceFirst("day$", ""));

答案 1 :(得分:5)

使用forEach对流进行迭代无法正常工作;您需要使用map将修改后的每个元素映射到新流。然后,您可以将结果收集回列表。

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

答案 2 :(得分:1)

具有小数点排序的子字符串

String arr [] = {“ 2.4”,“ 4.2”,“ 3.1”,“ 5.7”,“ 3.0”,“ 2.01”,“ 7.06”,“ 6.003”};

列表newList = Arrays.asList(arr); newList.stream()。map(n-> n.substring(n.indexOf('。'))).collect(Collectors.toList())。stream()。sorted()。forEach(n->系统。 out.println(n));;

答案 3 :(得分:0)

List<String> daysList = Arrays.asList("sunday", "monday", 
                                      "tuesday", "wednesday",
                                       "fri", "satur" 
                                      );


List<String> res = daysList.stream()
                            .map(s -> s.replace("day",""))
                            .collect(Collectors.toList());