java - 使用 java 流根据特定检查更新对象

标签 java foreach java-stream

我有一个 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/

相关文章:

JAVA 8 过滤具有任何匹配属性的对象列表

java - 性能差异: map() vs peek() with setters

java - 如何对字符串进行排序,使带有额外信息的值首先出现?

html - 在每三个元素之后放置广告 - Laravel Foreach

php - 使这个 Magento 嵌套循环更好

javascript - FUNCTION中如何返回为多维数组的输出

Java Streams - 使用 GroupingBy 收集到映射并进行计数,但如果特定字段为空则计数 0

java - 将 ejb 注入(inject) jsf 托管 bean 时出错

java - 在 Eclipse 中运行应用程序时设置 ClassPath 命令行参数

java - tomcat6.0 与 windows 7 中的 eclipse 3.4