数组列表 按 Id 检索对象

2022-09-01 18:29:52

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

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

我想根据应用程序许多部分中的参数检索特定对象。最好的方法是什么?AccountId

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


答案 1

听起来您真正想要使用的是 一个 ,它允许您根据键检索值。如果您坚持 使用 ,则唯一的选择是循环访问整个列表并搜索对象。MapArrayList

像这样:

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

accountsMap.get(someId)

这种操作位于 . vs 中。O(1)MapO(n)List

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

一般来说,这是糟糕的设计。请阅读有效的 Java Item 16 以更好地理解原因 - 或查看本文


答案 2

Java解决方案:

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

Kotlin 解决方案 1:

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

Kotlin 解决方案 2:

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