[英]how to check if the lists in a list have the same length
我在 Java 中有一个列表列表。这是代码:
List<List<Integer>> myList = new ArrayList<>();
myList.add(new ArrayList<Integer>());
myList.add(new ArrayList<Integer>());
myList.add(new ArrayList<Integer>());
myList.get(0).add(1);
myList.get(0).add(2);
myList.get(0).add(3);
myList.get(1).add(4);
myList.get(1).add(5);
myList.get(1).add(6);
myList.get(2).add(7);
myList.get(2).add(8);
myList.get(2).add(9);
如何检查 myList 中存在的列表是否具有相同的长度? 我知道我可以通过myList.get(0).size()
之类的方法检查每个列表的长度,所以检查所有这些列表是否具有相同长度的有效且简短的方法是什么(而不是一个一个地检查)?
您可以通过将任何包含的列表大小(例如第一个)与所有其他包含的列表匹配来使用Stream.allMatch()
:
boolean isSameLength =
myList.stream()
.allMatch(l -> l.size() == myList.get(0).size())
它使第一次比较无能为力,因为它比较了相同的包含列表,但它更具可读性:
boolean isSameLength =
myList.stream()
.skip(1)
.allMatch(l -> l.size() == myList.get(0).size())
您不能指望在不访问它们的情况下说n 个列表具有相同的长度。 你必须一个一个地去。 davidxxx 的回答显示了一种非常好的流方式,但无论如何都会访问所有列表。 天真的方法可能是
public static boolean sameLength(List<List> lists){
if(lists.get(0) == null){ //EDIT: as davidxxx pointed out this if is superfluous
return true;
}
int len = lists.get(0).size();
for (List list : lists) {
if(list.size() != len){
return false;
}
}
return true;
}
我的 IDE 甚至建议使用具有上述代码的功能运算符,如 davidxxx 所说。
如果您使用 Java 8,您可以使用 lambda 表达式来简化您的应用程序。 看:
if (myList.stream().filter(integers -> integers.size() == myList.get(0).size()).count() == myList.size()) {
System.out.println("The sub-lists have the same size");
}
您还可以检查使用计数器变量,迭代你myList
,并得到大小sublist
。 如果大小myList
== sublist
,然后分配true
否则分配false
像以下:
public static boolean isSameLength(List<List<Integer>> myList) {
boolean isSame = false;
for (List<Integer> sublist : myList) {
if (sublist.size() == myList.size()) {
isSame = true;
} else {
isSame = false;
}
}
return isSame;
}
我提出以下建议:
myList.stream()
.map(e -> e.size())
.distinct()
.limit(2) // optimization
.count() == 1;
基本上检查是否有任何 2 个不同大小的列表。
listOfList.stream().map(list -> list.size()).distinct().count() == 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.