将 java 流简化为 return 一条错误消息
simplify java stream to return an error message
你好,我是流媒体新手 java 我正在尝试查找文件中的哪个项目长度超过 12,如果该项目中混合了字母,我想知道这是否可以简化了在 java 中使用流而不使用 java 中的 forEach 方法 stream:
Stream<String> stream = Files.lines(path)
stream.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("Item must not exceed 12 numbers");
}
else if (matcher.matches()) {
log.error("Invalid Item format {}", item);
streamMessage.set("Invalid Item format");
}
});
我也需要它来 return log.error 消息和流消息谢谢
编辑:
我已经尝试过 Glare storm 的回答,但是消息被return编辑了:
Stream<String> lengthStream =
stream.filter(item -> item.length() > 12);
Pattern pattern = Pattern.compile(REGEX);
Stream<String> letterStream =
lengthStream.filter(pattern.asPredicate());
if(lengthStream != null){
log.error("Item must not exceed 12 numbers");
message = "Item must not exceed 12 numbers";
}
if(letterStream != null){
log.error("Invalid Item format");
message = "Invalid Item format";
}
它总是return项目格式无效,即使文件中没有字母并且长度仅超过 12 个
使用筛选方法:
Stream<String> stream = Files.lines(path);
Stream<String> filteredStream= stream .filter(str -> str.length() > 12);
Stream<String> matching = filteredStream.filter(str -> Pattern.matches(regex, str));
或:
Stream<String> matching = filteredStream.filter(str -> {
if(str.length() > 12 && Pattern.matches(regex, str))
return true;
return false;
});
要设置错误消息,您很可能必须抛出一个错误,该错误将 return 您想要的任何消息:
try{
Stream<String> matching = filteredStream.filter(str -> {
if(str.length() > 11 )
throw new Exception("Item must not exceed 12 numbers");
if(Pattern.matches(regex, str))
return true;
throw new Exception("Invalid Item format");
});
}
catch(Exception e){
log.error(e);
message = e;
}
你好,我是流媒体新手 java 我正在尝试查找文件中的哪个项目长度超过 12,如果该项目中混合了字母,我想知道这是否可以简化了在 java 中使用流而不使用 java 中的 forEach 方法 stream:
Stream<String> stream = Files.lines(path)
stream.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("Item must not exceed 12 numbers");
}
else if (matcher.matches()) {
log.error("Invalid Item format {}", item);
streamMessage.set("Invalid Item format");
}
});
我也需要它来 return log.error 消息和流消息谢谢
编辑:
我已经尝试过 Glare storm 的回答,但是消息被return编辑了:
Stream<String> lengthStream =
stream.filter(item -> item.length() > 12);
Pattern pattern = Pattern.compile(REGEX);
Stream<String> letterStream =
lengthStream.filter(pattern.asPredicate());
if(lengthStream != null){
log.error("Item must not exceed 12 numbers");
message = "Item must not exceed 12 numbers";
}
if(letterStream != null){
log.error("Invalid Item format");
message = "Invalid Item format";
}
它总是return项目格式无效,即使文件中没有字母并且长度仅超过 12 个
使用筛选方法:
Stream<String> stream = Files.lines(path);
Stream<String> filteredStream= stream .filter(str -> str.length() > 12);
Stream<String> matching = filteredStream.filter(str -> Pattern.matches(regex, str));
或:
Stream<String> matching = filteredStream.filter(str -> {
if(str.length() > 12 && Pattern.matches(regex, str))
return true;
return false;
});
要设置错误消息,您很可能必须抛出一个错误,该错误将 return 您想要的任何消息:
try{
Stream<String> matching = filteredStream.filter(str -> {
if(str.length() > 11 )
throw new Exception("Item must not exceed 12 numbers");
if(Pattern.matches(regex, str))
return true;
throw new Exception("Invalid Item format");
});
}
catch(Exception e){
log.error(e);
message = e;
}