2017-01-17 3 views
1

у меня есть три типа ArrayList INTEGERS, я хочу, чтобы найти наибольшее целое число из тех ArrayListКак найти наибольшее значение из нескольких ArrayList?

ArrayList<Integer> data1 = new ArrayList<>(); 
data1.add(20); 
data1.add(30); 
data1.add(40); 
data1.add(51); 
data1.add(71); 
data1.add(212); 
data1.add(203); 
ArrayList<Integer> data2 = new ArrayList<>(); 
data2.add(56); 
data2.add(67); 
data2.add(267); 
data2.add(257); 
data2.add(367); 
data2.add(363); 
data2.add(233); 
ArrayList<Integer> data3 = new ArrayList<>(); 
data3.add(36); 
data3.add(12); 
data3.add(366); 
data3.add(53); 
data3.add(124); 
data3.add(256); 
data3.add(203); 

System.out.println("Largest Value = "); 

есть ли простой способ найти наибольшее значение из нескольких ArrayList? Спасибо!

+0

Я бы не стал напрямую входить в код. Что вы можете сделать, добавьте все элементы из трех списков arrayList в один массивList. Затем выполните сортировку по этому массиву в обратном порядке. И первым элементом этого будет результат. Надеюсь, вы можете попытаться преобразовать эту логику в свой код. – Leo

ответ

4

Объединить последние два списка в первом, а затем использовать Collections.max():

data1.addAll(data2); 
data1.addAll(data3); 
Integer maxValue = Collections.max(data1); 
2
List<Integer> newList = new ArrayList<>(data1); 
newList.addAll(data2); 
newList.addAll(data3); 
Collestions.sort(newList); 
Collections.reverse(newList); 
System.out.println("max: " + newList.get(0)); 

или

Integer max(Integer element, List<Integer> list) { 
    Integer result = element; 
    for (Integer num : list) { 
    if (num > result) { 
     result = num; 
    } 
    } 
    return result; 
} 

Использование max метода:

Integer result = max(data1.get(0), data1); 
result = max(result, data2); 
result = max(result, data3); 
System.out.println("max: " + result); 
1

Если вы как потоки & сотрудничества:

import package java.util.stream.Stream; 

[...] 

int max = Stream.of(data1.stream(), data2.stream(), data3.stream()) 
    .flatMap(i -> i) 
    .mapToInt(i -> i) 
    .max() 
    .getAsInt(); 
2

Использование java.util.stream

Integer maxValue = Stream.of(data1, data2, data3) 
    .flatMap(Collection::stream) 
    .max(Integer::compare) 
    .get(); 
0

Другой пример потоковым, не плоское отображение в единый поток

Integer max = Stream.of(data1, data2, data3) 
     .map(list -> list.stream().max(Integer::compare).get()) 
     .max(Integer::compare).get(); 
6

Это действительно просто один, который не требует любая реструктуризация данных и не использует потоки. Не то, чтобы с потоками было что-то не так, а просто для альтернативного решения.

Integer maxValue = Math.max(Collections.max(data1), Math.max(Collections.max(data2), Collections.max(data3))); 
+1

Хороший ответ, но объединение коллекций не обязательно означает перемещение вокруг +1 –

+0

Это интересная мысль. В моей голове я думал, что данные должны быть перемещены последовательно в памяти, но я думаю, что это мышление массива: P –

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