首页 > 解决方案 > 各种类类型的 ArrayLists - 查找数组中键值位置的通用方法

问题描述

我有一个带有多个下拉列表的多个输入表单的 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;
    }

但当然编译器根本不喜欢这样。请问有什么建议吗?

标签: javaandroidarraylistdropdowncursor-position

解决方案


如果类的所有 30 个版本都相同getCode(),则创建一个接口(让它成为MyInterface),并让所有类实现这个接口。然后更新方法如下:

 int FindPositionGeneric(List<MyInterface> list, String strExistingId)
    {

        int intRC = IntStream.range(0, list.size())
                             .filter(i -> list.get(i).getCode().equals(strExistingId))
                             .findFirst()
                             .orElse(-1);

        return intRC;
    }

此外,由于您拥有orElse,因此无需intRC单独初始化。


推荐阅读