【问题标题】:How to sort ArrayList by id and add to ArrayList<ArrayList<DataPost>>如何按 id 对 ArrayList 进行排序并添加到 ArrayList<ArrayList<DataPost>>
【发布时间】:2020-02-10 11:52:06
【问题描述】:

我有带值的 mList2。存在具有相同 id 的值。如何获取一个 List 或 ArrayList,其中具有相同 id 的对象被分组并将其添加到 ArrayList 的 ArrayList

应该是这样的:

ArrayList<ArrayList<DataPost>> = [DataPost(with id1), DataPost(with id1), DataPost(with id1)],
[DataPost(with id2), DataPost(with id2)],
[DataPost(with id3), DataPost(with id3)],
[DataPost(with id4)],
[DataPost(with id5)].

此代码适用于 List,但不适用于 PostData

public static List<List<ProfileActivity.DataPost>> SortMyList(ArrayList<ProfileActivity.DataPost> list, Context context) {
    List<ProfileActivity.DataPost> mList2 = list;
    List<List<ProfileActivity.DataPost>> output = new ArrayList<List<ProfileActivity.DataPost>>();
    List<ProfileActivity.DataPost> itemsAlreadyGrouped = new ArrayList<ProfileActivity.DataPost>();
    for (int i = 0; i < mList2.size(); i++) {
        List<ProfileActivity.DataPost> groupList = new ArrayList<ProfileActivity.DataPost>();
        boolean groupCandidateFound = false;
        if (!itemsAlreadyGrouped.contains(mList2.get(i))) {
            for (int j = 0; j < mList2.size(); j++) {
                if (mList2.get(i).component4().equals(mList2.get(j).component4())) {
                    groupList.add(mList2.get(i));
                    groupCandidateFound = true;
                }
            }
            if (groupCandidateFound) {
                itemsAlreadyGrouped.add(mList2.get(i));
            }
        }
        if (groupList.size() > 0) {
            output.add(groupList);
        }
    }

    //Let's test the logic
    for (List<ProfileActivity.DataPost> group : output) {
        System.out.println(group);
    }
    return output;
}

数据发布

data class DataPost(var text:String? = null, var type:String = "", var photo:String? =null, var  ids_post:String = "", var position: String? = null)

【问题讨论】:

    标签: java android list kotlin arraylist


    【解决方案1】:

    执行此类分组的最简单方法是使用地图。在 Kotlin 中执行此操作非常简单,因为它已经有一个功能可以做到这一点。

    fun groupAndSort(posts: Collection<DataPost>): List<List<DataPost>> {
        val map = TreeMap<String, MutableList<DataPost>>()
        posts.groupByTo(map) { it.ids_post }
        return map.values.toList()
    }
    

    如果您需要 Java 解决方案,那么它很容易实现。

    public List<List<DataPost>> sortAndGroup(Collection<DataPost> posts) {
        Map<String, List<DataPost>> groups = new TreeMap<>();
        for (DataPost post : posts) {
            String id = post.getIds_post();
            List<DataPost> list = groups.get(id);
            if (list == null) {
                list = new ArrayList<>();
                groups.put(id, list);
            }
            list.add(post);
        }
        return new ArrayList<>(groups.values());
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2014-11-27
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多