说我有以下列表列表"
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流进行上述操作? (如果还有其他更好的方法可能的话)
我也可以参考最大尺寸的列表吗?
答案 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);