各种类类型的java ArrayList是查找数组中键值位置的通用方法
我有一个Android应用程序,有多个输入表单和多个下拉列表。 对于这些表单,用户可以在提交记录之前多次输入和退出记录。 因此,如果他们在下拉列表中选择了某个条目,退出记录,再次返回,他们会期望看到他们的最后一个条目已经在下拉列表中预选
下面是驱动下拉列表的许多类类型之一的示例:
public class SART implements Serializable
{
private String Code;
private String Description;
public String getCode() {return Code;}
public void setCode(String Code) {this.Code = Code;}
public String getDescription() {return Description;}
public void setDescription(String Description) {this.Description = Description;}
}
所以我取一个已知值,在驱动下拉列表的数组列表中查找它的位置,然后选择 这一行在下拉列表中。 下面是我如何做到这一点的一个例子:
int FindApplicationMethodPosition(ArrayList<SART> applicationMethods,String strExistingId)
{
int intSARTPosition = -1;
if (strExistingId !=null)
{
for(int i = 0; i <applicationMethods.size(); i++){
if(applicationMethods.get(i).getCode().equals(strExistingId))
{
intSARTPosition = i;
break;
}
}
}
return intSARTPosition;
}
我有大约30个不同版本的代码,我想试着只调用一个通用版本
int FindPositionGeneric(Object array, String strExistingId)
{
int intRC = -1;
intRC = IntStream.range(0, array.size())
.filter(i -> array.get(i).getCode().equals(strExistingId))
.findFirst()
.orElse(-1);
return intRC;
}
当然,编译器一点也不喜欢这样。 有什么建议吗
# 1 楼答案
它不知道如何从
array
获取元素,也不知道如何从数组中的元素获取code
传入一个
List<T>
和一个Function<T, String>
以允许它提取代码:请注意,这对于非
RandomAccess
列表(例如LinkedList
)是低效的。另一种解决方案是基于ListIterator
的循环:# 2 楼答案
如果类的所有30个版本都有相同的
getCode()
,那么创建一个接口(让它成为MyInterface
),并让所有类实现这个接口。然后更新方法,如下所示:另外,由于您有
orElse
,因此不需要单独初始化intRC