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