我有一个 TestA
类的 testAList
对象列表。我正在试验 Java 流,我想要实现的是更新该列表中满足检查的所有对象的 String b
属性。
class TestA {
private String a;
private String b;
}
到目前为止,以下是我使用流所取得的成就:
if(testAList!=null) {
testAList.forEach(testA -> {
if(testA.getA().equals("STREAMS") {
testA.setB("JUST_TEST");
}
});
}
我非常确定可以使用某些谓词以更好的方式重写此检查,但无法找到正确的匹配项。我看到了 filter
但不认为它可以使用,因为我想要完整的源 testAList
返回(但在对象内部进行了一些更新)。
任何提示就足够了:)
最佳答案
如果你真的必须这样做,你可以这样做:
testAList.stream()
.filter(testA -> "STREAMS".equals(testA.getA()))
.forEach(a -> a.setB("JUST_TEST"))
;
作为练习,您还可以创建一个“isStreams”方法:
boolean isStreams(TestA a) {
return "STREAMS".equals(a.getA());
}
//later
if(testAList!=null) {
testAList.stream().filter(this::isStreams).forEach(a -> a.setB("JUST_TEST"));
}
更进一步:
void setBToJustTest(TestA a) {
a.setB("JUST_TEST");
}
//later
testAList.stream().filter(this::isStreams).forEach(this::setBToJustTest);
这将“整齐地”从流表达式中获取所有细节。
除了“this”之外,您还可以在助手上静态声明它们并通过方法引用进行访问,例如:TestAHelper::isStreams
关于java - 使用 java 流根据特定检查更新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713013/