我有以下嵌套列表:
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/