gpt4 book ai didi

java - 仅当列表的第一个元素相等时,Stream 才返回对象

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:55 25 4
gpt4 key购买 nike

我得到了简单的数据结构

private InMemoryDataBase() {
Account account1 = new Account("222", "222");
account1.getPlayers().add(new Player("john"));
account1.getPlayers().add(new Player("rachel"));
Account account2 = new Account("111", "111");
account2.getPlayers().add(new Player("max"));
accounts.add(account1);
accounts.add(account2);
}

public class Account {
private String accountNumber;
private String password;
private List<Player> players;

public Account(String accountNumber, String password){
this.accountNumber = accountNumber;
this.password = password;
players = new ArrayList<>();
}
}

如果存在,则查找Account的方法

 private Optional<Account> findAccount() {
return dataBase.getAccounts()
.stream().findAny()
.filter(a -> a.getAccountNumber()
.equals(inputData.getAccountNumber()));
}

然后是简单的逻辑

public void process() {
Optional<Account> account = findAccount();
if(account.isPresent()) {
if(validatePassword(account.get().getPassword())) {
outputData = new PlayersList(ConnectionInfo.Source.SERVER, inputData.getSourceID(), players);
} else {
outputData = new Message(ConnectionInfo.Source.SERVER, inputData.getSourceID(), "Incorrect password");
}
} else {
outputData = new Message(ConnectionInfo.Source.SERVER, inputData.getSourceID(), "Account not found");
}
}

长话短说,这是客户端-服务器通信的一部分,inputData 是从客户端应用程序发送的数据。它似乎有效,但前提是我输入的 accountNumber 等于“222”(InMemoryDataBase.accounts 中的第一个。

我做了一些测试,我可以在我的数据库中切换这些值,只有当我请求列表中的第一个时,我才会得到肯定的结果。另一个以消息“找不到帐户”结束。

最佳答案

看起来你应该改为做

.filter(a -> a.getAccountNumber().equals(inputData.getAccountNumber()))
.findAny();

您目前最终使用的是 Optional.filter如果值存在,它会根据谓词过滤您使用 findAny() 得到的唯一 Optional

您应该使用 Stream.filter 而不是它它在内容流中进行过滤,然后您可以在其上使用 findAny() 来获取 Optional 值。

关于java - 仅当列表的第一个元素相等时,Stream 才返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52460151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com