查找ArrayList的ArrayList的最大值,key = length

时间:2015-12-13 07:04:52

标签: java arraylist

我有一个包含ArrayList

的ArrayList
ArrayList<ArrayList<String>> allChains = new ArrayList<ArrayList<String>>();

我需要找出这些中的最大值,key = length。在python中我可以使用下面的相同,如何在Java中做同样的事情。

>>> l = [ ["apple", "b", "c"], ["a"], ["a","b","c","d"]]
>>> max(l, key=len)
['a', 'b', 'c', 'd']

2 个答案:

答案 0 :(得分:2)

您可以使用Java 8 Streams:

ArrayList<ArrayList<String>> allChains = new ArrayList<>();
allChains.add (new ArrayList<String>(Arrays.asList ("apple", "b", "c")));
allChains.add (new ArrayList<String>(Arrays.asList ("a")));
allChains.add (new ArrayList<String>(Arrays.asList ("a","b","c","d")));

ArrayList<String> longest = allChains.stream()
                                     .max(Comparator.comparingInt(ArrayList::size))
                                     .get();

System.out.println (longest);

输出:

[a, b, c, d]

答案 1 :(得分:1)

使用Collections#max(Collection, Comparator),并将相应的Comparator作为第二个参数传递。

如果您使用的是Java 8,也可以使用Streams。比较器可以写成lambda:

(list1, list2) -> Integer.compare(list1.size(), list2.size());

在Java 7中,它将是这样的:

ArrayList<String> maxList = Collections.max(allChains, 
    new Comparator<ArrayList<String>>() {
        public int compare(ArrayList<String> list1, ArrayList<String> list2) {
            return Integer.compare(list1.size(), list2.size());
        }
    });