如何使用流设置对象的 属性
How to Set an Object's Property using Streams
我正在流式传输和过滤值。有什么办法可以在过滤器之后设置另一个对象值。我不想收集或 return 任何东西。
boolean b = ddlTables.stream()
.filter(d -> d.getFieldName().equalsIgnoreCase("restrict"))
.findFirst()
.isPresent();
if (b) {
validationModel.setFailMessage("Fail");
}
我不想按照上面的方式去做。
我试图避免 return 和 if
条件并设置如下值。
ddlTables.stream()
.filter(d -> d.getFieldName().equalsIgnoreCase("restrict"))
// validationModel.setFailMessage("failed"); <- Need to set the object value
有什么办法可以实现吗?
不鼓励更改流外对象的状态
但是您可以利用 Optional
class 提供的功能。
方法 Optional.ifPresent()
允许以 Consumer
的形式提供一个可选操作,该操作将在结果出现时执行。
将 stream-statement 提取到一个单独的方法中也是值得的( 没有什么特定于流 - 只是 Single-responsibility principle)。
final Model validationModel = // something
findByProperty(ddlTables, "restrict")
.ifPresent(something -> validationModel.setFailMessage("Fail"));
public static Optional<Something> findByProperty(List<Something> list, String targetValue) {
return list.stream()
.filter(d -> d.getFieldName().equalsIgnoreCase(targetValue))
.findFirst();
}
我唯一能提供的就是这个。它使用 isPresent
方法的结果来形成逻辑表达式。但是您必须始终 return 来自流的内容或使用触发值流的终端操作打印值。让我重申一下,您的第一种方法很好,我也会这样做。
if (ddlTables.stream().filter(d->
d.getFieldName().equalsIgnoreCase("restrict")).findFirst().isPresent()) {
validationModel.setFailMessage("Fail");
}
我正在流式传输和过滤值。有什么办法可以在过滤器之后设置另一个对象值。我不想收集或 return 任何东西。
boolean b = ddlTables.stream()
.filter(d -> d.getFieldName().equalsIgnoreCase("restrict"))
.findFirst()
.isPresent();
if (b) {
validationModel.setFailMessage("Fail");
}
我不想按照上面的方式去做。
我试图避免 return 和 if
条件并设置如下值。
ddlTables.stream()
.filter(d -> d.getFieldName().equalsIgnoreCase("restrict"))
// validationModel.setFailMessage("failed"); <- Need to set the object value
有什么办法可以实现吗?
但是您可以利用 Optional
class 提供的功能。
方法 Optional.ifPresent()
允许以 Consumer
的形式提供一个可选操作,该操作将在结果出现时执行。
将 stream-statement 提取到一个单独的方法中也是值得的( 没有什么特定于流 - 只是 Single-responsibility principle)。
final Model validationModel = // something
findByProperty(ddlTables, "restrict")
.ifPresent(something -> validationModel.setFailMessage("Fail"));
public static Optional<Something> findByProperty(List<Something> list, String targetValue) {
return list.stream()
.filter(d -> d.getFieldName().equalsIgnoreCase(targetValue))
.findFirst();
}
我唯一能提供的就是这个。它使用 isPresent
方法的结果来形成逻辑表达式。但是您必须始终 return 来自流的内容或使用触发值流的终端操作打印值。让我重申一下,您的第一种方法很好,我也会这样做。
if (ddlTables.stream().filter(d->
d.getFieldName().equalsIgnoreCase("restrict")).findFirst().isPresent()) {
validationModel.setFailMessage("Fail");
}