Я пытаюсь создать возможную комбинацию пары в указанном списке игроков, а также хочу найти возможное совпадение среди этих разных пар.
- Создан класс Pojo для пары - споля как Игрок 1 и Игрок 2.
- Итерированный список с возможной другой парой (например, p1, p2 & p3, p4 & p2, p3 и т. д.)
- Затем найдите возможные разные пары всовпадение (сколько совпадений возможно).
public class CombinationCreator {
public static void main(String[] args) {
List<String> playerList = Arrays.asList("PlayerA","PlayerB","PlayerC","PlayerD","PlayerE","PlayerF");
List<PlayPair> pairs = new ArrayList<>();
playerList.forEach(p -> {
playerList.stream().filter(p2 -> !p.equals(p2)).forEach(p2 -> pairs.add(new PlayPair(p, p2)));
});
//Printing all possbile pair ( with duplicate)
pairs.forEach(c-> System.out.println(c));
}
}
Класс пары POJO:
public class PlayPair {
private String player1;
private String player2;
// getters and setters
@Override
public String toString() {
return "PlayPair [player1=" + player1 + ", player2=" + player2 + "]";
}
public PlayPair(String player1, String player2) {
super();
this.player1 = player1;
this.player2 = player2;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PlayPair other = (PlayPair) obj;
if (player1 == null) {
if (other.player1 != null)
return false;
} else if (player2 == null) {
if (other.player2 != null)
return false;
}
if (!((player1.equals(other.player1) && player2.equals(other.player2))
|| (player1.equals(other.player2) && player2.equals(other.player1))))
return false;
return true;
}
}
Так как я очень новичок в Java Stream API и лямбде, я немного пытаюсь найтисочетание. В классической Java7 код кажется очень неуклюжим, а не эффективным способом. Есть ли самое простое и простое кодирование, способное решить мои проблемы?