Фильтрация потока и размещение значений на карте на основе условия - PullRequest
1 голос
/ 03 июля 2019

У меня есть строка, которую мне нужно преобразовать в карту.В строке есть две метки времени, поэтому эти значения должны быть сохранены как метка времени, а другие значения должны быть сохранены как строка.В настоящее время я использую две карты, а затем объединяю значения этих карт в новую карту, как показано ниже.Я хотел бы знать, если есть способ сделать это, используя одну карту.

String paramsValues = reportGenerationSchedules.get(0).getReport_parameters();
            paramsValues = paramsValues.substring(1,paramsValues.length()-1);

            Map<String, Object> reportGenerationParams1 = Arrays.asList(paramsValues.split(",")).stream()
                    .filter(x -> x.toString().split("=")[0].contains("Date"))
                    .collect(Collectors.toMap(x -> x.toString().split("=")[0],
                            x -> Timestamp.valueOf(x.toString().split("=")[1])));

            Map<String, Object> reportGenerationParams2 = Arrays.asList(paramsValues.split(",")).stream()
                    .collect(Collectors.toMap(x -> x.toString().split("=")[0],
                            x -> x.toString().split("=")[1]));

            Map<String, Object> params = new HashMap<String,Object>();
            params.putAll(reportGenerationParams2);
            params.putAll(reportGenerationParams1);

1 Ответ

2 голосов
/ 03 июля 2019

Вы можете определить функцию следующим образом:

 Function<String, Object> function = str -> str.contains("Date") ? 
                               Timestamp.valueOf(str.split("=")[1]) : 
                                str.split("=")[1];

и используйте эту функцию:

 Map<String, Object> reportGenerationParams1 = Arrays.asList(paramsValues.split(","))
            .stream()
            .collect(Collectors.toMap(x -> x.split("=")[0],x -> function.apply(x)));

Arrays.stream(paramsValues.split(","))
                    .map(x -> x.split("=",2))
                    .collect(Collectors.toMap(ar -> ar[0],
                            ar -> ar[1].contains("Date") ?
                                    Timestamp.valueOf(ar[1]) : ar[1]))
...