2017-09-09 7 views
-1

Javaコレクション内に存在する特定のキーの空白値の数をカウントします。コレクション内のキーの値が類似しています

ここ

は私の物である:

public class Widget { 
    private String name; 
    private String location; 
    private String lastUsedBy; 
    //getters and setters omitted 
} 

私はJSON経由でこれらの一連の中に取得し、私はそうのようなコレクションにそれらを回す:完璧

Type collectionType = new TypeToken<Collection<Widget>>(){}.getType(); 
Collection<Widget> response = new Gson().fromJson(json, collectionType); 

作品、それに満足 - しかし今、lastUsedBy属性が ""である私のコレクション内のウィジェットの総数を数える必要があります。

つまり、現在は設定されていません。そうすれば私は自分の合計ウィジェット(response.size())を決定し、実際に何を望むかを知るために "lastUsedBy"が設定されているウィジェットの数を控除することができます。

私は間違ったことを捜し続けているので、リストとマップについては多くのことを見ていましたが、必要なものを伝えることはできません。例のJSON:私は、Collections.filterOnLastUsedByEmpty()= 1をそれを行う方法を考え出すことができれば、私は)(そのresponse.sizeを見つけることを期待したい。この場合

[{"name": "one", "location": "upstairs", "lastUsedBy": "Gary"}, 
{"name": "one", "location": "downstairs", "lastUsedBy": "James"}, 
{"name": "one", "location": "outside", "lastUsedBy": ""}] 

はその後3です。したがって、3 - 1 = 2. ありがとう!

答えて

3

次の例のように、あなたの方法であなたのロジックを定義しようとすることができ、次のように

// java 1.8 
List<Widget> filterOnLastUsedByEmpty(Collection<Widget> widgets) { 
    return widgets.stream().filter(w -> w.lastUsedBy == null || w.lastUsedBy.isEmpty()).collect(Collectors.toList()); 
} 

// java < 1.8 
List<Widget> filterOnLastUsedByEmpty(Collection<Widget> widgets) { 
    List<Widget> r = new ArrayList<>(); 
    for (Widget widget : widgets) { 
     if (widget.lastUsedBy == null || widget.lastUsedBy.isEmpty()) { 
      r.add(widget); 
     } 
    } 
    return r; 
} 
0

使用ストリーム:

long count = response 
        .stream() 
        .filter(r -> r.getLastUsedBy() == null || u.getLastUsedBy().isEmpty()) 
        .count(); 
関連する問題