2017-01-17 6 views
1

私は、整数型の3つのArrayListを持っている私はそれらの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

私はコードに直接入りません。あなたができることは、3つの配列リストのすべての要素を1つのarrayListに追加することです。次に、このarrayListのソートを逆の順序で行います。そして、その最初の要素が結果になるでしょう。このロジックを自分のコードに変換しようとすることができます。 – 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)); 

またはmax方法使用

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

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 –

関連する問題