2016-11-30 2 views
0

У меня есть значения {42_2,42_3,43_1,43_2,44_1,44_2,44_3} в ArrayList в java. Я хочу извлечь из этого массива только эти значения (42_3,43_2,44_3). Как я могу это сделать?Получение наибольшего значения из массива

Мой код:

ArrayList<String> b = new ArrayList<String>(); 
ArrayList<String> x = new ArrayList<(Arrays.asList("42_1","42_2","43_1","43_2","44_1"‌​,"44_2","44_3")); 
for (String y : x) { 
    String[] no=y.split("_"); 
    for (int index = 0; index < no.length; index++) { 
      if (no[index] == no[1]){ 
       b.add(no[0]); 
      } 
     } 
} 

Заранее спасибо

+0

Что вы пробовали? –

+0

Я попытался расщепить значение с помощью «_», а затем сравнить, но я не получаю результат –

+1

Можете ли вы добавить свой код? –

ответ

0

Прежде всего, необходимо определить критерии, что больше, чем что. У вас в основном есть арраист строк. Почему 42_3 больше, чем 44_2?

(этот ответ может быть комментарий, если StackOverflow позволит мне)

+0

На самом деле, я хочу, чтобы наивысшее значение имело конкретное число. Например: Среди 42_2, 42_3 42_3 больше аналогично для 43_2 и 44_3 –

2
List<String> yourList = Arrays.asList("42_2", "42_3", "43_1", "43_2", "44_1", "44_2", "44_3"); 
    List<String> targetList = new ArrayList(); 
    String currentFirstPart = null; 
    String actualMax = null; 
    for (int i = 0; i < yourList.size(); i++) { 
     String current = yourList.get(i); 
     final String[] token = current.split("_"); 
     String firstPart = token[0]; 

     // only the first iteration 
     if (currentFirstPart == null) { 
      currentFirstPart = firstPart; 
     } 

     // we add the element when the first part of the String changes 
     // and we reset the actualMax 
     else if (!firstPart.equals(currentFirstPart)) { 
      targetList.add(actualMax); 
      actualMax = null; 
      currentFirstPart = firstPart; 
     } 

     // we update the actual max for the current first part 
     if (actualMax == null || current.compareTo(actualMax) >= 1) { 
      actualMax = current; 
     } 
    } 
    // We add the last element here if not added in the loop 
    if (currentFirstPart != null) { 
     targetList.add(actualMax); 
    } 
    } 
+0

Спасибо. Это сработало :) –

+0

Но если у меня есть только {42_1,43_1,44_2}, и я хочу получить их как они по величине по своей стоимости , я не получаю результат –

+0

Добро пожаловать :) Я закодировал то, что вы изначально задали. Вы бы уточнили свою потребность. Вы должны открыть новый вопрос, уточнив свое требование. Кроме того, если мой ответ затронул ваш первоначальный вопрос, вы должны его принять. – davidxxx

Смежные вопросы