sum*_*mit 9 java collections java-8 java-stream
我使用的是Java 8.
以下代码工作正常:
public void testMethod(List<String> prop1, EmailJson randomModel) {
prop1.stream().forEach(s -> randomModel.getSomeList()
.removeIf(model -> model.getSomeProp().equalsIgnoreCase(s)));
}
Run Code Online (Sandbox Code Playgroud)
如果条件为真,是否可以记录消息?
我正在寻找类似的东西:
public void testMethod(List<String> prop1, EmailJson randomModel) {
prop1.stream().forEach(s -> randomModel.getSomeList()
.removeIf(model -> model.getSomeProp().equalsIgnoreCase(s))
- > if this is true then log some action);
}
Run Code Online (Sandbox Code Playgroud)
你总是可以替换
removeIf(model -> model.getSomeProp().equalsIgnoreCase(s))
Run Code Online (Sandbox Code Playgroud)
同
removeIf(model -> {
boolean ret = model.getSomeProp().equalsIgnoreCase(s);
if (ret) {
// add logging
}
return ret;
})
Run Code Online (Sandbox Code Playgroud)
如果这是一个反复出现的问题,您可以创建一个辅助方法来概括用另一个操作来装饰谓词的任务,例如日志记录:
static <T> Predicate<T> logging(Predicate<T> p, BiConsumer<T,Boolean> log, boolean all) {
return t -> {
final boolean result = p.test(t);
if(all || result) log.accept(t, result);
return result;
};
}
Run Code Online (Sandbox Code Playgroud)
您可以使用它
public void testMethod(List<String> prop1, EmailJson randomModel){
prop1.forEach(s -> randomModel.getSomeList()
.removeIf(logging(model -> model.getSomeProp().equalsIgnoreCase(s),
(model,b) -> LOGGER.info(() -> "matched: "+model.getSomeProp()), false)));
}
Run Code Online (Sandbox Code Playgroud)
但是,在这种特定情况下,可能没有必要修饰谓词本身,因为removeIf返回boolean告知是否有要删除的匹配,并且匹配值仍在范围内:
public void testMethod(List<String> prop1, EmailJson randomModel){
prop1.stream().forEach(s -> {
if(randomModel.getSomeList()
.removeIf(model -> model.getSomeProp().equalsIgnoreCase(s)))
LOGGER.info(() -> "there were matches of: "+s);
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |