У меня есть два списка:Java 8: Объединение двух списков, содержащих объекты по ключевым
List<Server> servers1 = new ArrayList<>();
Server s1 = new Server("MyServer");
s1.setAttribute1("Attribute1");
servers1.add(s1);
List<Server> servers2 = new ArrayList<>();
Server s2 = new Server("MyServer");
s2.setAttribute2("Attribute2");
servers2.add(s2);
servers1
содержит серверы с name
и attribute1
(но не attribute2
).
servers2
содержит серверы с name
и attribute2
(но не attribute1
).
public class Server {
private String name;
private String attribute1;
private String attribute2;
public Server(String name) {
this.name = name;
this.attribute1 = "";
this.attribute2 = "";
}
//Getters & Setters
}
Кто-нибудь знает, как я могу объединить эти два списка один список, содержащий каждый Server
только один раз (по name
), но с обоими атрибутами?
Есть серверы, которые существуют только в одном или другом списке. Окончательный список должен содержать все серверы.
List<Server> servers1 = new ArrayList<>();
Server s1 = new Server("MyServer");
s1.setAttribute1("Attribute1");
Server s2 = new Server("MyServer2");
s2.setAttribute1("Attribute1.2");
servers1.add(s1);
servers1.add(s2);
List<Server> servers2 = new ArrayList<>();
Server s3 = new Server("MyServer");
s3.setAttribute2("Attribute2");
Server s4 = new Server("MyServer3");
s4.setAttribute2("Attribute2.2");
servers2.add(s3);
servers2.add(s4);
должно привести к:
[Сервер [имя = MyServer, attribute1 = attribute1, attribute2 = attribute2],
сервера [имя = MyServer2, attribute1 = Attribute1.2, attribute2 =] ]
сервера [имя = MyServer3, attribute1 =, attribute2 = Attribute2.2]]
// РЕШЕНИЕ (ТНХ все для помощи)
Map<String, Server> serverMap1 = Stream.concat(servers1.stream(), servers2.stream())
.collect(Collectors.toMap(Server::getName, Function.identity(),
(server1, server2) -> {
server1.setAttribute2(server2.getAttribute2());
return server1;
}));
Создайте карту 'name' на' Server' с 'servers1', а затем заполните отсутствующий' attribute2' с 'servers2', ища сервер на карте по имени. Попытайтесь написать код самостоятельно. – lexicore
Если это весь ваш класс 'Server', то как сущности в' List' имеют значения для 'name',' attribute1' или 'attribute2'. Если это не весь класс, укажите конструктор (ы) – CraigR8806
Имеются ли в двух списках всегда одни и те же серверы или существуют серверы, которые не будут объединены? –