2015-06-18 3 views
-2
public void getJustRevisionsNumberData(String duaNum) { 
    List<Number> dua = new ArrayList<Number>(); 
    dua = getRevisionsNum(duaNum); 

    // dua object -> 123, 843, 455, 565 
    // I want 843 

    for(Number number : dua) { 

     System.out.println(number); 

    } 
} 

getRevisionsNumПолучить Самый большой номер из списка номеров

public List<Number> getRevisionsNum(String duaNum) { 
    Session session = factory.openSession(); 

    AuditReader auditReader = AuditReaderFactory.get(session); 
    return auditReader.getRevisions(DuaVO.class, duaNum); 

Я пытаюсь получить наибольшее число, но не в состоянии придумать решение. Какие-либо предложения?

+1

Не могли бы вы вставить код метода getRevisionNum()? – null

+1

Math.max() или переопределить compareTo –

+1

Зачем использовать 'Number'? – sstan

ответ

2

Вы можете отслеживать наибольшее число, с которым вы столкнулись до сих пор, в другой переменной, например largestNumber, а затем, после того, как вы выполнили повторный запуск по всему набору, вы можете просто распечатать его с помощью вне цикла ,

double largestNumber = Double.MIN_VALUE; 
for(Number number: dua) 
{ 
    if(number.doubleValue() > largestNumber) 
     largestNumber = number; 
} 
System.out.println(largestNumber); 

Установка largestNumber к Double.MIN_VALUE гарантирует, что даже если вы имеете дело с очень большими отрицательными числами, они все равно должны удовлетворять number.doubleValue() > largestNumber. Для сравнения необходимо позвонить .doubleValue(), чтобы у вас было два double s.

+0

Оператор> не определен для типа аргументов Number, int – AppSensei

+0

К сожалению, мы использовали 'Number' здесь. Попробуйте использовать 'number.intValue()' вместо 'number' в сравнении, как я отредактировал. –

+1

Это не сработает, если цифры равны 0,1, 0,3 и 0,2, поскольку' intValue' вернет 0 для всех трех ... – assylias

-1

Один подход - вы можете сортировать коллекцию и выбирать первый или последний номер (в зависимости от того, как вы сортируете). Но сортировка вредит производительности.

Вы также можете прокручивать список, и если новый номер больше текущего сохраненного номера, он заменяется. Как и в случае:

public int getMax(ArrayList list){ 
    int max = Integer.MIN_VALUE; 
    for(int i=0; i<list.size(); i++){ 
     if(list.get(i) > max){ 
      max = list.get(i); 
     } 
    } 
    return max; 
} 

Это, в основном, то, что делает Collections.max (yourcollection).

+0

Вы не можете использовать '>' с 'Number's ... И ваш код не компилируется ... – assylias

+0

Преобразуйте его в нечто, что работает с>, number.doubleValue() .. Не компилируется ..? – Nils

0

Звучит просто! Вот пример я сделал, что работает для коллекции Целых:

** public int findMax(Collection<Integer> nums) { 
    int temp = Integer.MIN_VALUE; // we want it to have the lowest value possible, else if we initialise it to 0 and the largest number is less than 0 it will not work. 
    for (int i : nums) {// loop through the nums and we find the max number between temp and i and that is the new value of temp (So if i=10 and temp=1 then temp will be come 10) 
     temp = Math.max(i, temp); 
    } 
    return temp;//we return the largest number found. 
} 

public int findMax(Collection<Integer> nums) { 
    int temp = Integer.MIN_VALUE; 
    for (int i : nums) { 
     if(i > temp) temp = i;//similar with the code above, the only difference here is instead of calling a method over and over we perform a simple check and if it turns to be true (i is more than temp) then temp gets the value of i. 
    } 
    return temp; 
}** 

Надеется, что помог вам!

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