如何根据java中的id对列表中的值进行分组?

时间:2017-06-28 10:00:30

标签: java android json

大家好,这可能是一个愚蠢的问题,但作为一个初学者,我正在努力解决这个问题,如何根据列表中的id对值进行分组,现在让我简单地说明你有这样的一组对象:

 ID:1,UserID:330
 ID:2,UserID:303
 ID:3,UserID:090
 ID:1,UserID:302
 ID:2,UserID:306 

我的列表应该是什么样的(Json格式):

[{"ID":1,"UserID":[330,302]},{"ID":2,"UserID":[303,306]},{"ID":3,"UserID":[090]}]

现在让我发布我到目前为止所尝试的内容:

   final List<Integer>list=new ArrayList<>();
            final List<SpareReturnModel>lisobj=new ArrayList<>();
          int duplicate=0;
                        for(int i=0;i<tView.getSelected().size();i++){
                            Object o= tView.getSelected().get(i).getValue();
                            SpareReturnModel asset=(SpareReturnModel) o;

                            int flag=asset.getFlag();
                            if(flag==2) {
                            int warehouseid = asset.getWareHouseID();
                            asset.setWareHouseID(warehouseid);

                                int partid = asset.getSerialNoID();
                                list.add(partid);
                            }
                        else {
                                Log.d("s","no value for header");
                            }

                            if(duplicate!=asset.getWareHouseID()){
                                asset.setParlist(list);
                                asset.setWareHouseID(asset.getWareHouseID());
                                lisobj.add(asset);
                                list.clear();
                            }
                            duplicate=asset.getWareHouseID();     
                        }
            Gson gson=new Gson();

//this will convert list to json
           String value=gson.toJson(listobj);

SpareReturn模型类:

public class SpareReturnModel {
    private Integer SerialNoID;
    private String SerialNumber;
    private List<Integer>parlist;
    public List<Integer> getParlist() {
        return parlist;
    }
    public void setParlist(List<Integer> parlist) {
        this.parlist = parlist;
    }
    public Integer getFlag() {
        return flag;
    }
    public void setFlag(Integer flag) {
        this.flag = flag;
    }
    private Integer flag;
    public Integer getWareHouseID() {
        return WareHouseID;
    }
    public void setWareHouseID(Integer wareHouseID) {
        WareHouseID = wareHouseID;
    }
    private Integer WareHouseID;
    public Integer getSerialNoID() {
        return SerialNoID;
    }
    public void setSerialNoID(Integer serialNoID) {
        SerialNoID = serialNoID;
    }
    public String getSerialNumber() {
        return SerialNumber;
    }
    public void setSerialNumber(String serialNumber) {
        SerialNumber = serialNumber;
    }
}

有人能让我知道如何实现这一目标正在努力解决这个问题。

1 个答案:

答案 0 :(得分:0)

我简化你的课程以使解决方案更清晰:

public class SpareReturnModel implements Comparable<SpareReturnModel> {
    private Integer id;
    private String userId;

    public SpareReturnModel(Integer id, String userId) {
        this.id = id;
        this.userId = userId;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    @Override
    public int compareTo(SpareReturnModel other) {
        return this.getId().compareTo(other.getId());
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        SpareReturnModel model = (SpareReturnModel) o;

        if (id != null ? !id.equals(model.id) : model.id != null) return false;
        return userId != null ? userId.equals(model.userId) : model.userId == null;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (userId != null ? userId.hashCode() : 0);
        return result;
    }
}

并添加JsonSpareReturnModel

public class JsonSpareRuturnModel implements Comparable<JsonSpareRuturnModel> {
    private final List<SpareReturnModel> modelList;
    private final Integer id;

    public JsonSpareRuturnModel(List<SpareReturnModel> modelList) {
        this.modelList = modelList;
        this.id = modelList.get(0).getId();
    }

    private final String toJson() {
        return String.format("{\"ID\":%s,\"UserID\":%s}", id, formatUserIdList());
    }

    private String formatUserIdList() {
        StringBuilder builder = new StringBuilder("[");
        Iterator<SpareReturnModel> modelIterator = modelList.iterator();
        while (modelIterator.hasNext()) {
            builder.append(modelIterator.next().getUserId());
            if (modelIterator.hasNext()) {
                builder.append(",");
            }
        }
        builder.append("]");
        return builder.toString();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        JsonSpareRuturnModel that = (JsonSpareRuturnModel) o;

        return id != null ? id.equals(that.id) : that.id == null;
    }

    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }

    @Override
    public int compareTo(JsonSpareRuturnModel other) {
        return this.id.compareTo(other.id);
    }

    @Override
    public String toString() {
        return toJson();
    }

如果您需要按用户ID分组,则需要根据ID对模型进行排序 并将它们放到json格式模型中:

   public class Main {

    public static void main(String[] args) {
        List<SpareReturnModel> models = new ArrayList<>(Arrays.asList(
                new SpareReturnModel(1, "330"),
                new SpareReturnModel(2, "303"),
                new SpareReturnModel(3, "090"),
                new SpareReturnModel(1, "302"),
                new SpareReturnModel(2, "306")
        ));
        Map<Integer, List<SpareReturnModel>> groupById = new HashMap<>();
        for (SpareReturnModel model : models) {
            List<SpareReturnModel> listById = groupById.get(model.getId());
            if (listById == null) {
                groupById.put(model.getId(), new ArrayList<>(Arrays.asList(model)));
            } else {
                listById.add(model);
            }
        }
        List<JsonSpareRuturnModel> jsonList = new ArrayList<>();
        for (Map.Entry<Integer, List<SpareReturnModel>> pair : groupById.entrySet()) {
            jsonList.add(new JsonSpareRuturnModel(pair.getValue()));
        }
        System.out.println(jsonList);
        final String expected = "[{\"ID\":1,\"UserID\":[330,302]}, {\"ID\":2,\"UserID\":[303,306]}, {\"ID\":3,\"UserID\":[090]}]";
        System.out.println(jsonList.toString().equals(expected));
    }
}