Получение последнего индекса массива с условием - PullRequest
1 голос
/ 23 января 2020

У меня есть список, как показано ниже, поскольку он включает в себя много повторяющихся значений полей AbcConSch

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

в этом списке есть сумка, в которой есть элементы данных, поэтому мне нужно получить lastindexof () asBeanList с условием значение поля = "ConditionCode".

Я пытался с помощью приведенного ниже кода, чтобы получить значение

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

Спасибо за помощь и поддержку заранее. Arun

Ответы [ 3 ]

0 голосов
/ 23 января 2020

Я думаю, вы должны использовать этот способ.

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()
0 голосов
/ 23 января 2020

Ниже приведен код для языковой функции 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;

    }
0 голосов
/ 23 января 2020

Вы можете реализовать свой собственный метод 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));
...