2017-12-05 14 views
0

ArrayListのArrayListを調べ、空のものをすべて削除します。これを行うための高速かつ効率的な方法はありますか?それ以外の場合はforループと思いますか?JavaでArrayListからすべての空のArrayListを削除します

例出力リレー:

[[アレック、ジョー、線]、[]、[エリック、ヤコブ]、[]]

次のようになります。

[[アレック、ジョー、線]、[エリック、ヤコブ]]このような

答えて

3

何かで十分です。

nestedArrayList = nestedArrayList.stream() 
    .filter(e -> !e.isEmpty()) 
    .collect(Collectors.toCollection(ArrayList::new)); 

またはZabuzaを示唆しているとして、あなたはremoveIfを使用することができます。

nestedArrayList.removeIf(ArrayList::isEmpty); 

私見私は理由のカップルのための第二のアプローチで行くと思いますが、最も重要なのようにそれを読んで、「もし削除nestedArrayList ArrayListが空です "は、コードのより良い意図を理解しやすくしています。

+0

が実際に再集すべての必要がない完璧 – Alec

+1

勤務。あなたはインプレースでそれを行うことができます。 'List#removeIf'を使うと非常に便利です。 – Zabuza

+1

@Zabuza真実、その場合のオーバーヘッドは少なくなります。 –

3

Aomineにより投稿されたり、このようなイテレータとして上記のラムダ:

package com.company; 


import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Iterator; 

public class Main { 


    public static void main(String[] args) { 

    ArrayList<ArrayList<Integer>> lista = new ArrayList<>(){{ 
     add(new ArrayList<>(Arrays.asList(1,2,3))); 
     add(new ArrayList<>()); 
    }}; 

    Iterator<ArrayList<Integer>> iter = lista.iterator(); 

    while(iter.hasNext()){ 
     if (iter.next().isEmpty()) 
      iter.remove(); 
    } 

     System.out.println(lista); 

    } 

} 
+0

あなたのリストに物を追加する方法は珍しいようです。私はそれがおそらく動作することを意味しますが、読むのは簡単ではありません。 – Zabuza

+0

@ Zabuza匿名クラスの初期化、またはstackoverflowの "double brace initialization"と呼ばれています。これは、ArrayListを初期化するより速い方法です。 – prsvr

+1

ええ、それは初心者を混乱させるかもしれない珍しいスタイルです。だから私は* term *を追加してうれしいです。 – Zabuza

関連する問題