によってオブジェクトを含む二つのリストをマージ:の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
}
誰もが、私は(name
による)一度だけ 各Server
を含む1つのリストにはなく、両方の属性を持つこれら二つのリストをマージすることができます方法を知っていますか?
1つまたは他のリストにのみ存在するサーバーがあります。 最終的なリストにはすべてのサーバーが含まれている必要があります。
サーバ[名前= myServer2を、attribute1の= Attribute1.2、attribute2の=]、
[サーバー[名前= MyServerを、attribute1の= ATTRIBUTE1、attribute2の= attribute2の]:
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);
をもたらすはずです]
サーバー[名前= MyServer3、attribute1の=、attribute2の= Attribute2.2]]
// SOLUTION(THX助けを皆)
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;
}));
はservers1' 'からServer''へ 'name'のマップを作成し、名前でマップ内のサーバーを検索' servers2'から欠落している 'attribute2'を埋めます。あなた自身でいくつかのコードを書くようにしてください。 – lexicore
これが 'Server'クラスの全体である場合、' List'のエンティティは 'name'、' attribute1'または 'attribute2'の値をどのように持っていますか?これがクラス全体でない場合は、コンストラクタを含めてください – CraigR8806
2つのリストには常にマージされない同じサーバまたは存在するサーバが含まれていますか? –