Каким должен быть возврат лямбды в другую лямбду - PullRequest
0 голосов
/ 12 ноября 2019

Итак, у меня есть фрагмент кода, который выглядит следующим образом (берет строку и делит ее на ключ и значение параметра)

Files.lines(Paths.get("src/main/files/end.log")).forEach( (p) ->
            chart.computeIfPresent(p.substring(0,2), (k, v) -> {
                try {
                    v.setEndTime(p.substring(3));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }));

Но я не знаю, что мне возвращать во второй лямбдепотому что ни один вариант не работает. Или это вообще должно работать?

1 Ответ

2 голосов
/ 12 ноября 2019

Предполагая, что chart является Map и computeIfPresent является методом, который принимает key и BiFunction в качестве аргумента

default V computeIfPresent(K key,
                       BiFunction<? super K,? super V,? extends V> remappingFunction)

Если значение дляуказанный ключ присутствует и не равен нулю, пытается вычислить новое сопоставление, учитывая ключ и его текущее сопоставленное значение.

Таким образом, этот метод используется для вычисления нового значения для существующего ключа в картепоэтому BuFunction принимает key,oldvalue в качестве аргументов, а возвращаемое значение будет новым вычисленным значением для этого ключа

Пример:

Map<String, String> map = new HashMap<String, String>();

map.put("10", "Deadpool");

System.out.println(map);  //{10=Deadpool}

Теперь вычисляем новоезначение для ключа 10 с использованием computeIfPresent

  map.computeIfPresent("10", (key,oldVal)->"Iron Man");
System.out.println(map);   // {10=Iron Man}

Таким образом, в вашем коде вы должны вернуть новое значение, которое необходимо связать с ключом

Files.lines(Paths.get("src/main/files/end.log")).forEach( (p) ->
        chart.computeIfPresent(p.substring(0,2), (k, v) -> {
            try {
                v.setEndTime(p.substring(3));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        //return value for key p.substring(0,2)
        }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...