我想比较两个包含两个不同类的实例的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);
}
答案 0 :(得分:3)
编写自定义Comparator<T>
以执行您需要的操作。
也许两者的正则表达式都会这样做:
// two Strings both contain "foo"
return x.matches("[foo]") && y.matches("[foo]");
如果正则表达式无法做到,请实现自己的Knuth-Morris-Pratt匹配器:
答案 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;