比较两个包含类实例的arraylists

时间:2013-09-13 11:31:10

标签: java arraylist

我想比较两个包含两个不同类的实例的arraylists。

例如: 第一份清单:HKY SGP 15:00 3 20:20 700

第二名单:1 HKY SGP 8:00

因此,如果第一个列表包含单词HKY和SGP,则需要返回值700。 这两个都在一个名为cost的单独类中进行比较。我使用main方法将arraylists传递给这个cost类。然后,这个成本等级继续比较arraylists。

我尝试过: 我搜索了问题并尝试使用他们提供的一些解决方案。 我试过使用包含或等于。它给了我一个不正确的价值。

然后我尝试使用两个类中的get方法进行比较。它也没有提供所需的输出。

我认为我正在比较这两个对象,不确定如何比较。有人可以说明如何在arraylist中比较这些对象吗?

谢谢!

主要代码:

    ArrayList<planes> air = new ArrayList<>();
    ArrayList<questions> q = new ArrayList(); // same as below for questions

    Scanner sc = new Scanner(System.in);
    num = sc.nextInt();


    for (int i=0; i<num; i++){  
       planes p = new planes();

       p.setfrom(sc.next());
       p.setTo(sc.next());
       p.setdT(sc.next());
       p.setaD(sc.next());
       p.setaT(sc.next());
       p.setCt(sc.next());
       air.add(p);


    }

2 个答案:

答案 0 :(得分:3)

编写自定义Comparator<T>以执行您需要的操作。

也许两者的正则表达式都会这样做:

// two Strings both contain "foo"
return x.matches("[foo]") && y.matches("[foo]");

如果正则表达式无法做到,请实现自己的Knuth-Morris-Pratt匹配器:

http://www.ics.uci.edu/~eppstein/161/960227.html

答案 1 :(得分:0)

您可以实施Comparator<T>。因此,实现接口必须覆盖其compare(T arg0, T arg1)方法。在 T ,您可以将任何类型与之进行比较。像ArrayList&lt;&gt;(),Class,String等。并检查字符串是否包含HKY SGP;如果它们总是相邻的那么你可以直接做:

public int compare(String list1, String list2) {

    return list1.contains("HKY SGP") && list2.contains("HKY SGP") ? 700 : 0;
}

如果两个字符串都包含“HKY SGP”,则返回700,否则为0。

如果“SGP”并非总是在“HKY”之后,那么只需检查每一个。类似的东西:

return list1.contains("HKY") && list1.contains("SGP") && list2.contains("HKY") && list2.contains("SGP") ? 700 : 0;