[英]Compare elements in Array of ArrayList - Java
我正在使用以下代碼遍歷arraylist數組:
for(List<Long> innerList : arr) {
for(Long number : innerList) {
System.out.println(number);
}
}
這段代碼返回arraylist的每個數組中的數字。我想將arraylist的第一個數組的第一個元素與arraylist的所有其他數組的所有其他元素進行比較。 這個怎么做?
完整程序:
static long getWays(long sum, long[] changes) {
int count=0;
ArrayList<ArrayList<Long>> arr = new ArrayList<ArrayList<Long>>();
for(int i=0;i<changes.length;i++){
ArrayList<Long> arr1 = new ArrayList<Long>();
long change = changes[i];
long value = changes[i];
arr1.add(change);
for(int j=0;j<sum;j++){
change = change + value;
if(change>sum){
break;
}
arr1.add(change);
}
arr.add(arr1);
}
for(List<Long> innerList : arr) {
for(Long number : innerList) {
System.out.println(number);
}
}
return count;
}
Long first = arr.get(0).get(0);
for (List<Long> innerList: arr) {
for (Long number: innerList) {
System.out.println(number);
// Here compare first and number
}
}
您可以將第一個元素保留在var中。
我會去使用Stream.flatMap
。
返回一個流,該流包括將流中的每個元素替換為通過將提供的映射函數應用於每個元素而生成的映射流的內容而得到的結果。
flatMap()操作的作用是對流的元素進行一對多轉換,然后將生成的元素展平為新的流。
data.stream() //stream a list of list
.flatMap( List::stream ) //stream each list
// At this point, we have a Stream reading every `Long` values in those Collections
.filter(l -> l.equals(value)) //filter only the equivalent value
.count() - 1; //-1 to remove the first one
這將為您提供第一個值的出現次數,其中:
final Long value = data.get(0).get(0);
范例:
List<List<Long>> data = new ArrayList<List<Long>>();
for(int i = 0; i < 5; ++i){
data.add(new ArrayList<>());
for(int j = 0; j < 10; ++j){
data.get(i).add(1L * i * j);
}
}
final Long value = data.get(0).get(0);
long count = data.stream()
.flatMap( List::stream )
.filter(l -> l.equals(value))
.count() - 1;
System.out.println(count);
13
您不清楚自己在進行的比較,所以我讓您調整filter
。 我只是在這里計算第一個值的出現。
請注意,您仍然可以進行一些驗證來防止異常(檢查列表是否不為null,如果List
有一個Long
為1的List
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.