当前位置: 首页 > 知识库问答 >
问题:

可以通过公共字段对Java中的对象列表进行排序吗?[重复]

吴伟志
2023-03-14

我的软件上有一个对象列表,我想通过一个公共字段进行排序,例如:

List<Object> obj
ID 1 Price 0.0
ID 1 Price 1.2
ID 1 Price 1.3
ID 2 Price 2.0

我可以对列表进行排序以使ID=1的对象只出现一次吗?在这种情况下,列表中只剩下ID=1的第一个对象,例如:

ID 1 Price 0.0
ID 2 Price 2.0

我怎样才能做到这一点?

共有1个答案

洪飞龙
2023-03-14

如果基于id字段重写equalshashCode,则可以轻松计算不同元素的列表。

例如:

class Obj {
    private int id;
    private double price;

    public Obj(int id, double price) {
        this.id = id;
        this.price = price;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Obj))
            return false;

        return this.id == ((Obj) obj).id;
    }

    @Override
    public int hashCode() {
        return Integer.hashCode(id);
    }

    ...
}

以及:

List<Obj> result = objects.stream().distinct().collect(Collectors.toList());
 类似资料:
  • 问题内容: 我有一个Java对象列表,希望根据多个字段进行排序。 是否可以使用或接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。

  • 我有一个小问题,希望你能帮我解决。 我有一个名为Entity的类,它有几个属性,其中两个属性是id和实用程序: 然后,我在ArrayList中有几个Entity对象,如下所示: 现在,我想根据公用事业实体对列表进行排序。我使用一个定制的比较器,尝试了几种类似我在这里读到的解决方案: 但是在这条线上: 我遇到了以下错误:int不能被解引用,我不知道如何修复它。你们能帮我解决这个问题或者给出另一个解决

  • rank ▲ ✰ vote url 49 432 198 616 url 通过列表中字典的值对列表进行排序 我的到了一个字典的列表,我想对字典的值进行排序. [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}] 对name进行排序,应当是: [{'name':'Bart', 'age':10}, {'name':'Homer', 'age

  • 问题内容: 我使用python创建原型,并且为此使用了zip函数,但不确定如何在Java中执行此操作。基本上,我有两个列表(一个是名称,一个是数据),希望它们相对于彼此排序。我的程序仅处理列表(在这种情况下为数据),但是我将名称用作对正在处理的数据的引用,并且我想尝试以不同的顺序处理数据。这是结构的一个示例(实际上我的数据没有提供给我存储,但是我会对其进行基本排序或反向排序,没什么花哨的)。 所以

  • 问题内容: 我想对命名元组的列表进行排序,而不必记住字段名的索引。我的解决方案似乎很尴尬,希望有人能提供一个更优雅的解决方案。 谢谢,尼克 问题答案: 按名称排序列表 按年龄排序列表

  • 问题内容: 和骗局。如何按升序排序,然后按?有人可以帮忙吗?我知道在中具有通用算法和重载运算符,但是我是Java新手。 问题答案: 使实现或在单独的类中实现。然后致电: 要么 通常,如果有一个单一的“自然”排序顺序,则实施是个好主意…否则(如果你碰巧想要按特定顺序进行排序,但可能同样容易地希望使用另一个顺序),则最好实现。老实说,这种特殊情况可能会发生任何一种……但是我可能会坚持使用更灵活的选择。