[英]How to check if many lists have the same length
我有许多不同类型的列表,我想检查所有当前列表是否具有相同的大小。 例如:
private List<String> list1;
private List<Integer> list2;
private List<Boolean> list3;
private List<Integer> list4;
private List<String> list5;
private List<String> list6;
private List<String> list7;
private List<String> list8;
private List<String> list9;
private List<String> list10;
当然,我可以将所有这些列表放在一个列表中( List<List<T>> lists
),然后使用 stream 检查相同的大小。 例如:
boolean isSameLength = lists.stream()
.skip(1)
.allMatch(l -> l.size() == myList.get(0).size());
但我不想创建一个单独的列表来存储其他列表。 如果我们知道列表列表可以是动态的(我的意思是我们可以有 N 个列表),还有其他方法可以检查它们的大小吗?
有一种使用反射的方法:
class MyCls { // class that contains "dynamic" lists
private List<String> list1;
private List<Integer> list2;
}
MyCls cls = new MyCls();
List<List> list = new ArrayList<>();
for (Field field : MyCls.class.getDeclaredFields()) {
Object f = field.get(cls);
if (f instanceof List) {
list.add((List) f);
}
}
// remember to check for list size
if(list.stream()
.allMatch(l -> list.get(0).size() == l.size())) {
// do something
}
你可以这样做:
IntSummaryStatistics stats = Stream.<List<?>>of(list1, list2, list3, list4, list5,
list6, list7, list8, list9, list10)
.mapToInt(List::size)
.summaryStatistics();
boolean isSameLength = (stats.getMin() == stats.getMax());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.