获取带有条件的arraylist的最后一个索引

Posted

技术标签:

【中文标题】获取带有条件的arraylist的最后一个索引【英文标题】:Getting last index of arraylist with condition 【发布时间】:2020-05-09 07:38:09 【问题描述】:

我有如下所示的列表,因为这包括 AbcConSch 的许多重复字段值

List<AbcConSch> asBeanList= tbCondition.getAbcConScheds();
AbcConSch abcSchedule = asBeanList.get(i);

这个列表有包含数据元素的包,所以我需要获取 lastindexof() asBeanList 字段值=“ConditionCode”的条件。

我已经尝试使用下面的代码来获取价值

i == asBeanList.lastIndexOf(abcSchedule.getSrConditionCode().contains(SC_CONDITION_CODE_ABC))

感谢您提前提供的帮助和支持。 阿伦

【问题讨论】:

【参考方案1】:

你可以实现自己的lastIndexOf()方法,让它接受一个表达式来匹配:

public static <E> int lastIndexOf(List<E> list, Predicate<E> predicate) 
    for (ListIterator<E> iter = list.listIterator(list.size()); iter.hasPrevious(); )
        if (predicate.test(iter.previous()))
            return iter.nextIndex();
    return -1;

测试

List<String> list = Arrays.asList("AA", "BB", "ABC", "CC");
System.out.println(lastIndexOf(list, s -> s.contains("AA")));
System.out.println(lastIndexOf(list, s -> s.contains("A")));
System.out.println(lastIndexOf(list, s -> s.contains("BB")));
System.out.println(lastIndexOf(list, s -> s.contains("B")));
System.out.println(lastIndexOf(list, s -> s.contains("CC")));
System.out.println(lastIndexOf(list, s -> s.contains("C")));
System.out.println(lastIndexOf(list, s -> s.contains("DD")));

输出

0
2
1
2
3
3
-1

对于您的代码,您可以这样使用它:

List<AbcConSch> asBeanList = tbCondition.getAbcConScheds();
int i = lastIndexOf(asBeanList, a -> a.getSrConditionCode().contains(SC_CONDITION_CODE_ABC));

【讨论】:

【参考方案2】:

我认为你必须使用这种方式。

privat ArrayList<AbcConch>abc=new ArrayList();
List<AbcConSch> asBeanList= tbCondition.getAbcConScheds();
 for (int i=0;i<=asBeanList.size();i++
  if(asBeanList.get(i).getSrConditionCode().contains(SC_CONDITION_CODE_ABC))
  abc.add(asBeanList.get(i);
 

最后你可以得到最后一个索引值

int i = abc.size()

【讨论】:

非常感谢..它解决了我的问题。 请认为它赞成并接受它,所以它也有助于其他人。【参考方案3】:

以下是Java语言函数List.lastIndexOf()的代码:

public int lastIndexOf(Object o) 
        if (o == null) 
            for (int i = size-1; i >= 0; i--)
                if (elementData[i]==null)
                    return i;
         else 
            for (int i = size-1; i >= 0; i--)
                if (o.equals(elementData[i]))
                    return i;
        
        return -1;
    

从这里,您可以简单地修改它以接受任意函数:

public int lastIndexOf(Object o) 

    // delete null checks (or leave in if your code requires them)

        for (int i = size-1; i >= 0; i--)
            if (yourCustomConditionHere)  // add your custom condition
                return i;

    

【讨论】:

以上是关于获取带有条件的arraylist的最后一个索引的主要内容,如果未能解决你的问题,请参考以下文章

2018-10-19 00:13:35 ArrayList

当Arraylist增长时,带有ArrayList键的HashMap无法找到它

ArrayList循环仅输出最后一项[重复]

获取 arrayList 的项目索引,知道它的名称

获取最后添加的元素 Arraylist

为每个循环迭代 ArrayList 获取 a 的当前索引