首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较列表中的对象属性值

比较列表中的对象属性值
EN

Stack Overflow用户
提问于 2013-02-08 15:40:24
回答 3查看 1.2K关注 0票数 1
代码语言:javascript
运行
复制
Class Order
{
  String  name;
  Order(String n)
   { name = n; }

 //setter and getters of name
}

Order a = new Order("same");
Order b = new Order("same");
Order c = new Order("diff");

List<Order> nameList// a,b,c

我也想

代码语言:javascript
运行
复制
seperate list of Orders 
     List<Order> dupList// a,b
     List<Order> nondupList// c

现在我想检查一下"nameList“的多个顺序中是否有相同的名称。

我使用列表的索引实现了这一点,并与其他索引列表顺序进行了比较。

但有没有其他更好的方法来实现这一点呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-08 16:02:05

也许另一种方法是-重写hashCode方法和equals方法。在计算字符串名称时生成hasCode。

代码语言:javascript
运行
复制
public class Order {
    String name;

    public Order(String n) {
        name = n;
    }

    // setter and getters of name
    @Override
    public int hashCode() {
        int h = 0;
        int len = name.length();
        for (int i = 0; i < len; i++)
            h = 31 * h + name.charAt(i);
        return h;
    }
    @Override
    public boolean equals(Object obj) {
        if(obj == null)
            return false;
        else if(this.hashCode() == obj.hashCode())
            return true;
        return false;
    }
}

..。

代码语言:javascript
运行
复制
List<Order> nameList = ...;// a,b,c
Set<Order> nonDuplicate= new HashSet<Order>(nameList);
票数 1
EN

Stack Overflow用户

发布于 2013-02-08 16:03:15

如果您想要使用纯java,请将元素添加到列表中,并使用适当的比较器对其进行sort。然后迭代列表,跟踪前一个元素,进行控制中断;换句话说,如果该元素与前一个元素相同,则这两个元素都是重复的。如果它们不是(或者是第一个),则它们是候选者,您需要等待下一次检查才能找到重复项。

如果不想排序,可以在元素出现时将其添加到集合中;如果在添加元素之前,该元素已经在集合中,则可以将其添加到重复集合中。您可以在两个集合上执行检查,在执行过程中删除,或者从完整集合中删除最后的重复项。你可以使用任何集合,但是Set更有效,因为它有一个快速的包含方法。

如果可以使用库,那么只需使用Guava并将所有内容添加到多集(http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Multiset.html ),然后对多集进行迭代,就可以得到每个元素的计数。

票数 1
EN

Stack Overflow用户

发布于 2013-02-08 16:16:41

您可以使用Map>,获取给定名称的列表,如果为null,则创建它并将其放入列表中,在该列表中添加当前顺序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14767821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档