Как написать функцию слияния для Collectors.toMap () - PullRequest
0 голосов
/ 26 февраля 2020

Здесь UserMst - это объект, а users - это список, из которого я получаю LoginId && TenantId.

LinkedHashMap<String, String> Tmap = users.stream().collect(Collectors.toMap(
                    UserMst::getLoginId, UserMst::getTenantId,
                        (x, y)-> ((x=="1") ? "Rocks" : (x=="2")
                                           ? "Mocks" : (x=="3")
                                           ? "Docs"  : (x=="4")
                                           ? "Pocks" : "")
                                   + " ,  " + ( (y=="1") ? "Rocks": (y=="2")
                                                         ? "Mocks": (y=="3")
                                                         ? "Docs" : (y=="4")
                                                         ? "Pocks": ""),
                        LinkedHashMap::new));


///////////////////

LinkedHashMap<String, String> Tmap =
    users.stream().collect(
        Collectors.toMap( UserMst::getLoginId, UserMst::getTenantId,
        (x, y)-> x + ", " + y, LinkedHashMap::new)); 

```

It gives output as answer:: rajat=1,2,3 dave=1,2 milind=2,3
I just need these 1,2,3,4 replaced with strings

1 Ответ

4 голосов
/ 26 февраля 2020

Третьим аргументом Collectors.toMap() является функция слияния, которая является функцией, которая получает два значения Map и возвращает "объединенное" значение. Это используется для объединения нескольких значений, которые соответствуют одному и тому же ключу.

Нельзя преобразовывать значения вашей карты из "1", "2", "3", ... в другие String с.

Чтобы заменить значения чисел c на String с, вы можете выполнить преобразование в преобразователе значений:

LinkedHashMap<String, String> Tmap = 
    users.stream()
         .collect(Collectors.toMap(UserMst::getLoginId,
                                   u -> convert(u.getTenantId()),
                                   (x, y)-> x + ", " + y,
                                   LinkedHashMap::new)); 

, где convert - метод который принимает String, такой как «1», и возвращает соответствующий String.

Например:

public static convert (String x)
{
    return x.equals("1")?"Rocks":x.equals("2")?"Mocks":x.equals("3")?"Docs":x.equals("4")?"Pocks":"";
}

Или вы можете добавить в класс UserMst метод, который возвращает String соответствует getTenantID() этого экземпляра, а затем просто напишите:

LinkedHashMap<String, String> Tmap = 
    users.stream()
         .collect(Collectors.toMap(UserMst::getLoginId,
                                   UserMst::getTenantString,
                                   (x, y)-> x + ", " + y,
                                   LinkedHashMap::new)); 
...