ArrayList 通过 Id 检索对象

新手上路,请多包涵

假设我有一个 ArrayList<Account> 我的自定义对象,这非常简单。例如:

 class Account
{
public String Name;
public Integer Id;
}

我想在我的应用程序的许多部分中基于 Id 参数检索特定的 Account 对象。解决这个问题的最佳方法是什么?

我正在考虑扩展 ArrayList 但我相信一定有更好的方法。

原文由 Madhur Ahuja 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 762
2 个回答

听起来您真正想要使用的是 Map ,它允许您根据键检索值。如果你坚持 ArrayList ,你唯一的选择是遍历整个列表并搜索对象。

就像是:

 for(Account account : accountsList) {
   if(account.getId().equals(someId) {
       //found it!
   }
}

相对

accountsMap.get(someId)

这种操作是 O(1) O(n) A Map List

我正在考虑扩展 ArrayList,但我相信一定有更好的方法。

一般来说,这是糟糕的设计。阅读 Effective Java Item 16 以更好地理解原因——或者查看这篇 文章

原文由 Amir Afghani 发布,翻译遵循 CC BY-SA 3.0 许可协议

解决方案:

 Account account = accountList.stream().filter(a -> a.getId() == YOUR_ID).collect(Collectors.toList()).get(0);

科特林解决方案 1:

 val index = accountList.indexOfFirst { it.id == YOUR_ID }
val account = accountList[index]

科特林解决方案 2:

 val account = accountList.first { it.id == YOUR_ID }

原文由 Ahamadullah Saikat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题