我有一个包含ArrayList
的ArrayListArrayList<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']
答案 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());
}
});