我是Java流的新手,可以在ArrayList上使用Java流。这一次我没有任何线索,已经试了两个小时了。我不知道。我不确定是否可以在这里使用Java流。有人能指引我吗?我甚至不知道从哪里开始。我该如何检查以下条件transactions.getAvatarInfo() != null
?
这个for循环按预期工作。我需要在这里使用Java Streams而不是for循环。我能够在其他for循环中使用Java Streams,这是直接的。在这里,我甚至不知道从哪里开始。
for (int i = 0; i < accountInfo.get().getTransactions().size(); i++) {
Transactions transactions = accountInfo.get().getTransactions().get(i);
AvatarInfo avatarInfo = new AvatarInfo ();
if (transactions.getAvatarInfo() != null) {
transations.setAvataruri(TransactionsConstant.PREFIX +
transactions.getAvatarInfo().getUserName().toLowerCase());
transactions.getAvatarInfo().setUserName(transactions.getAvatarInfo ().getUsername());
}
}
到目前为止,我已经在下面尝试过了,但在null之后说; is expeccted
时出错。如果我加上这一点,就会出现另一个错误。
accountInfo.get().getTransactions().stream().filter(a -> {
AvatarInfo avatarInfo = new AvatarInfo ();
a.getAvatarInfo() != null
})
如果只有一个表达式,则可以仅使用该表达式编写lambda,如下所示:
a -> (a.getAvatarInfo() != null) // returns a boolean for filter
然而,当您引入{}
时,您有一个完整的嵌入式方法,它必须遵循方法的所有正常语法。在这种情况下,由于lambda应该返回布尔值,因此需要
return a.getAvatarInfo() != null;
然而,new AvatarInfo()
业务似乎完全没有必要,可以删除,从而允许您使用更简单的表单。
ArrayList
是Collection
。由于Java 8Collection
定义了一个stream()
方法,该方法将返回ArrayList
元素的Stream
。
请参阅https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#stream--
要获得列表,我们需要一个收集器,所以我认为它应该是这样的:
transactions.stream()
.filter(account -> account.getAvatarInfo() != null)
.collect(Collectors.toList());
否则,它将只返回一个Stream而不是List。