如何从多个ArrayList中找到最大值?

时间:2017-01-17 07:18:56

标签: java 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中找到最大值? 谢谢!

6 个答案:

答案 0 :(得分:6)

这是一个非常简单的,不需要重新构建数据,也不使用流。并不是说使用流有什么问题,而只是提供替代解决方案。

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

答案 1 :(得分:4)

将最后两个列表合并到第一个列表中,然后使用Collections.max()

data1.addAll(data2);
data1.addAll(data3);
Integer maxValue = Collections.max(data1);

答案 2 :(得分: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);

答案 3 :(得分:2)

使用java.util.stream

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

答案 4 :(得分:1)

如果你喜欢溪流&amp;共:

import package java.util.stream.Stream;

[...]

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

答案 5 :(得分:0)

另一个流式示例,而不是平面映射到单个流

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