0

マップを含むJavaのリストから値を削除します

私はこの形式でリストを持っています:

List: [{id=1,c_id=3,value=5},{id=1,c_id=2,value=5},{id=1,c_id=3,value=5},{id=2,c_id=1,value=5},       
        {id=2,c_id=null,value=5}}];

その結果、私は取得しようとしています

List: [{id=1,c_id=3,value=5},,{id=1,c_id=2,value=5},{id=2,c_id=1,value=5}}]

同じid場合c_idは削除する必要があり、同じ場合c_idは削除nullする必要があります。

4

3 に答える 3

3

できるよ

for(Iterator<Map<String, Object>> iter = list.iterator(); iter.hasNext(); ) {
    Map<String, Object> map = iter.next();
    Object c_id = map.get("c_id");
    if (c_id == null || c_id.equals(matching_c_id))
        iter.remove();
}
于 2012-09-25T13:19:16.737 に答える
1

グアバ液

Iterables.removeIf(list, new Predicate<Element>(){
    @Override public boolean apply(Element e) {
        return e.c_id == null || e.c_id.equals(matching_c_id);
}});
于 2012-09-25T14:23:02.830 に答える
0

解決策は次のようになると思いますが、読みやすいと思います。

まず、オブジェクト タイプのセット エレメント プロキシを作成します。

public class MyTypeProxy {

     private MyType obj;

     public MyTypeProxy(MyType obj) {

         this.obj = obj;

     }

     public MyType getObj() { return this.obj; }

     public int hashcode() {

         return obj.getC_id() ^ obj.getId();

     }

     public boolean equals(Object ref) {

         if (ref.getClass() != MyTypeProxy.class) {
             return false;
         }
         return 
              ((MyTypeProxy)ref).obj.getC_id() == this.obj.getC_id() &&
              ((MyTypeProxy)ref).obj.getId() == this.obj.getC_id();
     }
}

次に、コードで HashSet を構築できます。

HashSet<MyTypeProxy> set = new HashSet<MyTypeProxy>();

for (MyType mt : list) {
    if (mt.getC_id() != null){
        set.add(new MyTypeProxy(myList));
    }
}

以下は2つのことを行います。まず、ヌルの c_id フィールドを持つオブジェクトを除外し、次に、同じ id と c_id の組み合わせを持つオブジェクトを除外します。最初のものを保持しても問題ないかどうかを検討することをお勧めします (それが上記のコードの動作です)。

このセットには、まさに必要なものが含まれています。

于 2012-09-25T13:35:52.487 に答える