如何比较Arraylist(Java)中每对的2个元素



我有一个接口对

import java.util.ArrayList;
public interface Pair<T,M> {
public T getFirst();
public M getSecond();
public ArrayList<Pair<T,M>> Compare(ArrayList<Pair<T,M>> list);
}

以及一个名为MatchingPairs的类,它实现了Pair接口:

import java.util.ArrayList;
public class MatchingPairs implements Pair<Integer, Integer> {
@Override
public Integer getFirst() {
return null;
}
@Override
public Integer getSecond() {
return null;
}
@Override
public ArrayList<Pair<Integer, Integer>> Compare(ArrayList<Pair<Integer, Integer>> list) {
return null;
}
}

我不知道如何通过实现compare方法来比较每对中的第一个元素和第二个元素。

我不确定您想用Compare方法实现什么。但这里有一个使用Comparable接口比较两个MatchingPairs列表的示例。

import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public interface Pair<T,M> extends Comparable<Pair<T,M>> {
T getFirst();
M getSecond();
}
public static class MatchingPairs implements Pair<Integer, Integer> {
private final Integer first;
private final Integer second;
public MatchingPairs(int first, int second) {
this.first = first;
this.second = second;
}
@Override
public Integer getFirst() {
return first;
}
@Override
public Integer getSecond() {
return second;
}
/**
* Returns 0 if both first and second are equal in this and the other object
* Returns 1 if both first and second are greater in this object ('this' is greater than 'other')
* Otherwise return -1 ('this' is less than 'other')
*/
@Override
public int compareTo(@NotNull Pair<Integer, Integer> other) {
int cf = this.getFirst().compareTo(other.getFirst());
int cs = this.getSecond().compareTo(other.getSecond());
if (cf == 0 && cs == 0) {
return 0;
} else if (cf > 0 && cs > 0) {
return 1;
}
return -1;
}
@Override
public String toString() {
return "MatchingPairs{first=" + first + ", second=" + second + '}';
}
}
public static void main(String[] args) {
List<MatchingPairs> pairs = List.of(new MatchingPairs(2,3), new MatchingPairs(1,2), new MatchingPairs(1,1));
MatchingPairs find = new MatchingPairs(1, 2);
// collect all pairs that are greater than 'find'
List<MatchingPairs> matching = pairs.stream()
.filter(mp -> mp.compareTo(find) > 0)
.collect(Collectors.toList());
System.out.println(matching);
}
}

compareTo方法的确切实现可能与您不同,因为您没有指定要实现的确切行为
在主方法中,我们创建一个MatchingPairs列表,然后从该列表中收集所有大于指定MatchingPair实例的MatchingPais。

最新更新