#java #interface
#java #интерфейс
Вопрос:
У меня есть пара интерфейсов
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;
}
}
Я не знаю, как сравнить первый элемент и второй элемент каждой пары, реализовав метод сравнения.
Комментарии:
1. Почему класс элемента
MatchingPairs
(хотя имя кажется странным) содержит метод для сравнения их списков? И в чем проблема с получением элементов с одинаковым индексом, получением первого и второго для обоих элементов и их сравнением?2. Ваш метод
Compare()
кажется мне действительно странным. Пожалуйста, предоставьте некоторые примерные данные и результат метода. Объясните, что он должен производить. Обычно я ожидаю, что aPair
реализуетComparable
интерфейс, то есть имеетcompareTo
метод, в котором вы сравниваете этот экземплярPair
с другимPair
, и это возвращает логическое значение.
Ответ №1:
Я не уверен, чего вы пытаетесь достичь с помощью метода сравнения. Но вот пример сравнения двух списков совпадающих пар с использованием сопоставимого интерфейса.
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 amp;amp; cs == 0) {
return 0;
} else if (cf > 0 amp;amp; 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 .