繁体   English   中英

如何检查多个列表是否具有相同的长度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM