Java 8 flux comment fusionner 2 listes de taille non-égalité avec une logique personnalisée pour choisir les doublons

TrongBang:

J'ai 2 listes d'objets cartographiques.

 "list1": [
    {
      "partyId": "1",
      "accountId": "1",
      "sourceSystem": "1",
    },
    {
      "partyId": "2",
      "accountId": "2",
      "sourceSystem": "2",
    }]

et c'est liste2.

 "list2": [
    {
      "partyId": "3",
      "accountId": "3",
      "sourceSystem": "3",
    },
    {
      "partyId": "1",
      "accountId": "2",
      "sourceSystem": "2",
    }]

Maintenant, je dois fusionner list1 et list2 d'avoir cette sortie.

 "merged": [
    {
      "partyId": "1",
      "accountId": "1",
      "sourceSystem": "1",
    },
    {
      "partyId": "2",
      "accountId": "2",
      "sourceSystem": "2",
    },
    {
      "partyId": "3",
      "accountId": "3",
      "sourceSystem": "3",
    }]

de sorte que vous pouvez le voir se confond 1,2 et 3 de list1 et list2. En outre, puisque liste2 a une partyId = 1 (également en list1), mais les détails (accountid et sourceSystem) sont différents de sorte que le partyId = 1 à list1 est sélectionné.

Comment puis-je faire avec java flux 8? Ou la seule façon est de les convertir en objets java et faire pour boucle.

Ravindra Ranwala:

Vous pouvez le faire comme si d'un seul coup,

List<Map<String, String>> resultMap = Stream.concat(mapListOne.stream(), mapListTwo.stream())
    .collect(Collectors.groupingBy(m -> m.get("partyId"), Collectors.toList()))
    .entrySet().stream()
    .map(e -> e.getValue().get(0))
    .collect(Collectors.toList());

Ceci est un deux calcul étape où l' on calcule d' abord Listdes cartes pour chaque valeur partyId comme une carte et obtenir le premier élément sur chaque Listpour calculer le résultat final.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=201125&siteId=1
conseillé
Classement