2017-01-10 1 views
-1

Не уверен, имеет ли смысл смысл. но я в настоящее время застреваю, пытаясь получить последнее вхождение объекта в список. Предположим, что объект скомпрометирован по возрасту (целые числа) и именам (строкам). Я пытаюсь получить последнее вхождение возраста «18» в списке и получить имя. Как я могу это сделать?Java - Получение последнего вхождения объекта в список только с частичными данными

Текущий блок кода я работаю (К сожалению, пришлось поливать его вниз много):

private List<Callable<Void>> createTasks(ArrayList<NamesAndAges> namesAndAges) { 
     List<Callable<Void>> tasks = new ArrayList<Callable<Void>>(); 

     int endOfIndex = 0, beginningOfIndex = 0; 

     for (NamesAndAges nameAndAge : namesAndAges) 
     { 
      if (endOfIndex >= minSize && endOfIndex == namesAndAges.lastIndexOf(???)) 
      { 
       tasks.add(new addIntoDB(namesAndAges.subList(beginningOfIndex, endOfIndex))); 
       beginningofIndex = endOfIndex+1; 
      } 
      endOfIndex++; 
     } 
     return tasks; 
    } 

Я в основном застрял на том, где ??? находятся в коде. Я думал, что смогу использовать его, используя lastIndexOf().

+0

Это не вопрос о Java, а вопрос о том, как написать программу, не так ли? Можете ли вы показать нам, что вы пробовали? – scottb

+0

Обратный список объектов, а затем пересечь список, используя для цикла, 'break' из' for loop' при первом появлении 'age = 18'. Если вы предоставите некоторый код, я могу дать лучшее решение. –

+0

@scottb О, я думал, что это один лайнер. Я смотрел на lastIndexOf(), чтобы узнать, есть ли способ сделать это, используя это. Если это длиннее, чем одна-две строки, то, я думаю, мне нужно написать целую новую функцию или класс, чтобы разобраться. Виноват. –

ответ

0

на основе this answer, если у вас есть список, вы можете начать свой итератор в конце сбора и перебирать в обратном направлении:

// Substitute appropriate type. 
ArrayList<MyItem> a = new ArrayList<MyItem>(); 

// add your elements... 

// Generate an iterator. Start after the last element. 
ListIterator li = a.listIterator(a.size()); 

// Iterate in reverse. 
MyItem mi = null; 
while(li.hasPrevious()) { 
    mi = li.previous(); 
    if(mi.getAge().equals("18")) { // obviously, your test will likely differ... 
     break; 
    } 
} 
+0

Мм .. Я думаю, это отвечает на вопрос, но я думал, что будет лучший способ это сделать. –

0

Попробуйте что-то вроде этого.

ArrayList<Integer> a = new ArrayList<Integer>(); 

    // add your elements... 
    for(int i = 1; i < 19; i++) 
    { 
     a.add(i); 
    } 


    while(a.size() > 0) 
    {    
     System.out.println("last item: " + a.get(a.size() - 1));//print last item 
     a.remove(a.size() - 1);//remove last item 
    } 
Смежные вопросы