java - 使用Java 8流来转换嵌套集合

标签 java java-8 java-stream

我有以下嵌套列表:

List<List<String>> nestedList = new ArrayList<>();
nestedList.add(Arrays.asList("aM0", "b"));
nestedList.add(Arrays.asList("c", "aM0"));

我想从所有字符串中删除“M0”。我想使用 Java 8 流来挑战自己。以下是我写的:

nestedList.stream()
  .map(t -> t.stream()
  .map(s -> s.substring(0, s.indexOf('M')))
  .collect(Collectors.toCollection(ArrayList::new)))
  .collect(Collectors.toList());

但是JDK抛出了很多异常。谁能告诉我如何修复?或者在这种特殊情况下我们不能使用流?谢谢。

最佳答案

你真正的问题是 String::substring所以当你使用例如:

String str = "b";
str = str.substring(0, str.indexOf('M'));

这会抛出:

java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 1

因为 str.indexOf('M') 返回 -1 如果没有出现这样的情况 ( String::indexOf ),所以 str.substring(0, -1) 将因该错误而失败

<小时/>

在这种情况下,最好使用 String::replace像这样:

nestedList = nestedList.stream()
        .map(t -> t.stream()
                .map(s -> s.replace("M0", ""))
                .collect(Collectors.toList())
        ).collect(Collectors.toList());

输出

[[a, b], [c, a]]

关于java - 使用Java 8流来转换嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50933920/

相关文章:

java - 如何在java程序中解决两部电梯的场景

java - @WebMvcTest 失败,出现 java.lang.IllegalStateException : Failed to load ApplicationContext

java - 如何创建 boolean 方法以从处理程序返回值

java - 使用数字和范围对字符串列表进行排序

java - 枚举声明调用方法

java - 从嵌套 HashMap 中删除条目时java中的ConcurrentModificationException

java - ifPresent 返回一些东西 orElse

java - 如何计算一个周期的天数?

java - 流有序/无序问题

Java 8 流和 lambda