【发布时间】:2019-08-29 15:05:05
【问题描述】:
我有一个 testAList 类 TestA 的对象列表。我正在试验 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(但对象内部有一些更新)。
任何提示都足够了:)
【问题讨论】:
-
replaceAll(x -> if(x.getA().equals("STREAMS") { x.setB("JUST_TEST"); return x; }; return x;)未编译,但看replaceAll -
这里只使用for循环。
-
基本上是
list.stream().filter(...).forEach(...)(过滤器不会从列表中删除元素,只是从流中删除)如果你有相应的方法:list.stream().filter(TestA::isAStreams).forEach(this::setBJustTest)(显然有更好的名字) -
@CarlosHeuberger 我在您的评论出现之前就开始输入我的答案。很生气,现在看起来像是我偷了你的主意!
-
filter() 实际上过滤流而不是实际的数组/列表。 @CarlosHeuberger 感谢这一行。清理了很多与流相关的东西。我以前没有想到它的坏处:) 一直把它与实际列表混淆。
标签: java foreach java-stream