0

マップのリストを反復してフィールドの最大値を見つける方法

地図があるというリストがあります

listGrid={{id=5,name="person",no=9},{id=6,name="person",no=19},{id=6,name="jam",no=10}}

IDの重複を削除する必要があるため、結果のdivが必要であり、最大フィールドがありません

    List<Map> listGrid=new ArrayList<Map>();
    Map<String,Object> resultMap=new HashMap<String,Object>();
    resultMap.put("id", "5");
    resultMap.put("name", "one");
    resultMap.put("no", 1);
    listGrid.add(resultMap);
    resultMap.put("id", "5");
    resultMap.put("name", "one");
    resultMap.put("no", 11);
    listGrid.add(resultMap);
    resultMap.put("id", "1");
    resultMap.put("name", "one");
    resultMap.put("no", 5);

    List list=new ArrayList();
     Map  mapList=new HashMap();
       ListIterator litr = listGrid.listIterator(); 
        while(litr.hasNext()) {

            Map element = (Map)litr.next(); 
            String id= (String) element.get("id");
            Integer damagesNo = (Integer) element.get("no");
            if(mapList.containsKey(id)){
            Integer mapCode = (Integer) mapList.get(id);
            int damagesNoInt = damagesNo;
            int mapCodeInt = mapCode;
            if(damagesNoInt <= mapCodeInt){
                int i=litr.nextIndex()-1;
                list.add(i);
            }
            else{
                mapList.put(id, damagesNo);

            }}
            else{
                mapList.put(id, damagesNo);
            }
        }
        System.out.println(listGrid);

これで試してみましたが、正しく動作していません。

4

2 に答える 2

1

私によると、id、no、name値のDTOクラスオブジェクトを作成し、それらに対して適切なアプローチで処理を行う必要があります

このコードを試してください

public static void main(String[] args) throws IOException {

        List<Map> listGrid = new ArrayList<Map>();

        Map<String, Object> resultMap = new HashMap<String, Object>();
        resultMap.put("id", "5");
        resultMap.put("name", "person");
        resultMap.put("no", 9);
        listGrid.add(resultMap);
        resultMap = new HashMap<String, Object>();
        resultMap.put("id", "6");
        resultMap.put("name", "person");
        resultMap.put("no", 19);
        listGrid.add(resultMap);
        resultMap = new HashMap<String, Object>();
        resultMap.put("id", "6");
        resultMap.put("name", "jam");
        resultMap.put("no", 21);
        listGrid.add(resultMap);
        resultMap = new HashMap<String, Object>();
        resultMap.put("id", "6");
        resultMap.put("name", "jam");
        resultMap.put("no", 21);
        listGrid.add(resultMap);
        List<Map> destListGrid = new ArrayList<Map>();
        HashMap<String, Object> destMap = new HashMap<String, Object>();

        ListIterator litr = listGrid.listIterator();
        while (litr.hasNext()) {

            HashMap<String, Object> element = (HashMap<String, Object>) litr
                    .next();
            String id = (String) element.get("id");
            Integer damagesNo = (Integer) element.get("no");
            if (destMap.containsKey(id)) {
                Integer mapCode = (Integer) destMap.get(id);
                if (mapCode <= damagesNo) {
                    destMap.remove(id);
                    destMap.put(id, damagesNo);
                }
            } else {
                destMap.put(id, damagesNo);
            }
        }

        for (Map map : listGrid) {

            if (destMap.containsKey(map.get("id"))
                    && destMap.get(map.get("id")) == map.get("no")) {
                            destMap.remove(map.get("id"));  
                destListGrid.add(map);
            }
        }

        System.out.println(destListGrid);
    }
于 2012-07-17T04:34:07.377 に答える
0

それがあなたに適している場合にのみ、他の方法をお勧めします。このソリューションは、標準のデータ構造が機能するようにするオーバーライドされた専用クラスhashCodeとメソッドの作成に基づいています。equalsエンティティの id 値を返すには hashCode が必要であり、 equals メソッドを使用して id を比較して等しいかどうかを比較し、より大きな値を持つエンティティのみが前のものを置き換えることを許可するよりも値を比較しません。コードを参照してください。

public class MapList {

static class Entity {

    int id;
    String name;
    int no;

    public int hashCode() {
        return id;
    }

    public boolean equals(Object o) {
        if (o instanceof Entity) {
            Entity entity = (Entity) o;
            return id == entity.id && entity.no >= no;
        }
        return false;
    }

    public Entity(int id, String name, int no) {
        this.id = id;
        this.name = name;
        this.no = no;
    }

    public String toString() {
        return String.format("[id=%d,name='%s',no=%d]", id, name, no);
    }

}

public static void main(String[] args) {
    List<Entity> initialList = new ArrayList<Entity>();
    initialList.add(new Entity(5, "person", 9));
    initialList.add(new Entity(6, "person", 19));
    initialList.add(new Entity(6, "jam", 10));
    System.out.println(initialList);
    Set<Entity> magicCleanSet = new HashSet<Entity>();
    magicCleanSet.addAll(initialList);
    System.out.println(magicCleanSet);
}

}

出力は次のとおりです。

[[id=5,name='person',no=9], [id=6,name='person',no=19], [id=6,name='jam',no=10]]
[[id=5,name='person',no=9], [id=6,name='person',no=19]]

これが役に立ち、あなたの仕事に適していることを願っています。

于 2012-07-17T06:23:24.670 に答える