如何使用Java 8流从列表列表中获取最大列表的大小?

时间:2018-05-25 13:03:13

标签: java java-8 java-stream

说我有以下列表列表"

List l1 = Arrays.asList(1,2,3,4);
List l2 = Arrays.asList(1,2,3,4,5);
List l3 = Arrays.asList(1,2,3,4,5,6);
List<List> lists = Arrays.asList(l1,l2,l3);

如何使用Java 8流API了解最大列表的大小? 我想,这样的事情会起作用:

lists.stream().reduce(Integer.MIN_VALUE, (a,b) -> Integer.max(a.size(), b.size()));

但是由于显而易见的原因,它给了我:

Type mismatch: cannot convert from int to List

如何使用Java 8流进行上述操作? (如果还有其他更好的方法可能的话)

我也可以参考最大尺寸的列表吗?

6 个答案:

答案 0 :(得分:12)

您只需致电userPrincipalName

max

并获取最大尺寸的列表:

lists.stream().mapToInt(List::size).max().getAsInt()

答案 1 :(得分:5)

如果您只需要知道尺寸,而不知道列表本身。

List l1 = Arrays.asList(1,2,3,4);
List l2 = Arrays.asList(1,2,3,4,5);
List l3 = Arrays.asList(1,2,3,4,5,6);
List<List> lists = Arrays.asList(l1,l2,l3);
lists.stream().map(List::size).max(Comparator.naturalOrder()).get();

答案 2 :(得分:2)

要获得包含reduce的最长列表,您可以执行以下操作:

new ApiResource
 (
   "fiver_auth_api", 
   "Fiver.Security.AuthServer.Api", 
    new List<string> {"role"} <--- Add this line to your API
  )

这会根据大小将您的字符串列表减少到单个列表(该列表是可选的)。要打印它的大小,你可以这样做:

    Optional<List> list=lists.stream().reduce((a, b) -> a.size()>b.size()? a:b);

或者一个班轮将是:

    list.ifPresent((a)-> System.out.println(a.size()));

答案 3 :(得分:1)

您可以使用地图操作来获取大小而不是缩小大小,然后您可以使用内置方法max找到最大值(返回OptionalInt,因此您使用{ {1}}返回get

int

答案 4 :(得分:0)

如果你遇到过&lt; Java8,一个简单的循环就足够了:

int max = 0;
for (List list : lists) {
    if (list.size() > max) {
        max = list.size();
    }
}

答案 5 :(得分:0)

final int maxSize = lists.stream().map(List::size).max(Integer::compare).orElse(0);