在流中重用流 java
reusing stream inside a stream java
您好,我只是想知道我的代码有什么问题,我该如何改进它,因为它会抛出错误“流已被操作或关闭”,谢谢,这是我的代码:
Stream<String> stream = Files.lines(path)
stream.filter(item -> !item.contains("String")).forEach(item -> {
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(item);
if (!stream.filter(items -> items.length() > 12).collect(Collectors.toList()).isEmpty() == true) {
log.error("Item must not exceed 12 numbers {}", item);
streamMessage.set("Items must not exceed 12 numbers");
}
else if(matcher.matches() == true){
log.error("Invalid String format {}", item);
streamMessage.set("Invalid String format");
}
});
我想在文件中循环并检查每行字符是否超过 12 个字符
您不能重复使用 Stream
。您可以使用 Files.lines(path)
创建两个 Stream
,但鉴于您的代码,我认为没有必要。
您可以使用单个 Stream
:
找到所有太长的元素
List<String> tooLong =
stream.filter(item -> !item.contains("String"))
.filter(items -> items.length() > 12)
.collect(Collectors.toList());
if (tooLong.size () > 0) {
log.error("Items must not exceed 12 numbers {}", tooLong.toString ());
streamMessage.set("Items must not exceed 12 numbers");
}
编辑:
问题编辑后,您似乎想对 Stream
的每个元素进行两次检查。你仍然可以用一个 Stream
:
stream.filter(item -> !item.contains("String"))
.forEach(item -> {
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(item);
if (item.length() > 12) {
log.error("Item must not exceed 12 numbers {}", item);
streamMessage.set("Items must not exceed 12 numbers");
} else if(matcher.matches()) {
log.error("Invalid String format {}", item);
streamMessage.set("Invalid String format");
}
});
您好,我只是想知道我的代码有什么问题,我该如何改进它,因为它会抛出错误“流已被操作或关闭”,谢谢,这是我的代码:
Stream<String> stream = Files.lines(path)
stream.filter(item -> !item.contains("String")).forEach(item -> {
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(item);
if (!stream.filter(items -> items.length() > 12).collect(Collectors.toList()).isEmpty() == true) {
log.error("Item must not exceed 12 numbers {}", item);
streamMessage.set("Items must not exceed 12 numbers");
}
else if(matcher.matches() == true){
log.error("Invalid String format {}", item);
streamMessage.set("Invalid String format");
}
});
我想在文件中循环并检查每行字符是否超过 12 个字符
您不能重复使用 Stream
。您可以使用 Files.lines(path)
创建两个 Stream
,但鉴于您的代码,我认为没有必要。
您可以使用单个 Stream
:
List<String> tooLong =
stream.filter(item -> !item.contains("String"))
.filter(items -> items.length() > 12)
.collect(Collectors.toList());
if (tooLong.size () > 0) {
log.error("Items must not exceed 12 numbers {}", tooLong.toString ());
streamMessage.set("Items must not exceed 12 numbers");
}
编辑:
问题编辑后,您似乎想对 Stream
的每个元素进行两次检查。你仍然可以用一个 Stream
:
stream.filter(item -> !item.contains("String"))
.forEach(item -> {
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(item);
if (item.length() > 12) {
log.error("Item must not exceed 12 numbers {}", item);
streamMessage.set("Items must not exceed 12 numbers");
} else if(matcher.matches()) {
log.error("Invalid String format {}", item);
streamMessage.set("Invalid String format");
}
});