0

我想将两个包含两个单独类的实例的数组列表相互比较。

例如:第一个列表:HKY SGP 15:00 3 20:20 700

第二名:1 HKY SGP 8:00

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

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

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

我想我不正确地比较了这两个对象,不知道如何比较。有人可以阐明如何比较数组列表中的这些对象吗?

谢谢!

主要代码:

    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);


    }
4

2 回答 2

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

于 2013-09-13T11:33:21.450 回答
0

您可以实现一个Comparator<T>. 所以实现接口必须重写它的compare(T arg0, T arg1)方法。在T你可以把任何类型进行比较。像ArrayList<>(), 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;
于 2013-09-13T11:36:53.247 回答