我有一个java流,其中我必须只对一些对象应用操作,但我希望得到具有相同元素数的流。例如
我有用户类。
class User {
String name;
String balance;
String company;
}
我想增加50个现有余额为500或以上的用户的余额。在返回列表中,我还需要未修改余额的用户,
[ {
"name": "john"
"balance": 450
"company": "AAA"
},
{
"name": "Susana"
"balance": "550"
"company": "BBB"
},
{
"name": "Peter"
"balance": "300"
"company": "CCC"
}
]
回报应该是
[ {
"name": "john"
"balance": 450
"company": "AAA"
},
{
"name": "Susana"
"balance": "600"
"company": "BBB"
},
{
"name": "Peter"
"balance": "300"
"company": "CCC"
}
]
和原来的顺序一样,但是记录被修改了,这符合条件。任何想法我怎么能用流和功能方式做到这一点,没有如果,等等
我尝试了过滤器
方法,但它只是将过滤后的值传递到下游。
users
.stream()
.filter( user -> user.getBalance() >= 500 )
.forEach( user -> { user.setBalance( user.getBalance() + 50 ) } ) ;
forEach
是一个终端操作,完成流的工作。
无需返回新列表。名为users
的User
对象的原始列表仍然保留。原始列表中包含的一些对象将被forEach
修改。
你不需要小溪。一个简单的for
循环就可以了。
for( User user : users )
{
int b = user.getBalance() ;
if ( b >= 500 ) { user.setBalance( b + 50 ) ; }
}
如果你有一个流,使用stream#forEach
可以获得与for
循环相同的效果。
users
.stream()
.forEach( user -> {
if ( user.getBalance() >= 500 )
{
user.setBalance( user.getBalance() + 50 ) ;
}
}) ;
在这种情况下,我想说for
循环更容易阅读。流并不总是有利的。
你说:
不,如果不是的话
在某个时刻,你必须做一个比较,看看当前余额是否超过500。因此,if-else
是进行这种比较的明显方式。在比较一个数字时,流并没有提供任何魔力。
users
.stream()
.filter( user -> user.getBalance() >= 500 )
.forEach( user -> { user.setBalance( user.getBalance() + 50 ) } ) ;
正如ernest_k所评论的,您可以调用所有元素的setter,同时使用三元运算符将余额与500进行比较。如果低于500,则加零。如果达到我们的门槛,再加50。
users
.stream()
.forEach( user ->
user.setBalance(
user.getBalance() +
( user.getBalance() >= 500 ? 50 : 0 )
)
) ;
如果这种更紧凑的方法触发了副作用,例如对数据库的无意义写入,那么它就不合适了。
问题内容: 我有一个对象列表,其中每个对象返回。我如何使用Java 8流仅获得一个? 类具有以下方法; 我有 我正在尝试的是 但是上面的行没有返回 ,而是 我不想要的。 问题答案: 您应该用来从包含在主列表中每个对象中的列表中创建一个列表。请检查; 该调用适用于列表中包含with 的情况,因为这将导致下一行,因此我们应该将其过滤掉。还有其他方法可以实现这一点; -- -- 您可以按如下方式包含来自
我想用Java 8编写纯函数,它将集合作为参数,对集合每个对象应用一些更改,并在更新后返回一个新集合。我希望遵循FP原则,所以我不希望更新/修改作为参数传递的集合。 有没有什么方法可以通过Stream API做到这一点,而不首先创建原始集合的副本(然后使用forEach或'normal'for循环)? 下面的示例对象,并假设我要将文本追加到object属性之一: 所以我想做一些类似下面的事情,但不
主要内容:修改单个元素,修改一组元素Python 提供了两种修改列表(list)元素的方法,你可以每次修改单个元素,也可以每次修改一组元素(多个)。 修改单个元素 修改单个元素非常简单,直接对元素赋值即可。请看下面的例子: 运行结果: [40, 36, -26, 2, -66.2, 100, 7] 使用索引得到列表元素后,通过 赋值就改变了元素的值。 修改一组元素 Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果
问题内容: 如果我有两个清单 什么是获取熊猫数据框的最优雅的方式,如下所示: 注意,第一列是索引。 问题答案: 使用于:
问题内容: 在带有Python的Selenium中,是否可以将WebElement的所有子级作为列表获取? 问题答案: 是的,您可以通过或实现。 但是,这听起来并不像查找某个元素的 所有子 元素的有效用例。要获得所有直接/间接孩子都是昂贵的手术。请进一步说明您要做什么。应该有更好的方法。
在Selenium和Python中,是否可以将WebElement的所有子元素作为列表?