Java 8 - вызов метода с несколькими аргументами из Collection.stream.map () - PullRequest
0 голосов
/ 29 ноября 2018

Я давно использую java 8 Streams.Я столкнулся с ситуацией, когда мне нужно пройти через List и передать каждый элемент статическому методу вместе с другим аргументом.Это возможно в Java 8?

........
String designation = "Engineer";
List<String> names = new ArrayList<>();
names.add("ABC");
names.add("DEF");
names.add("GHI");
names.stream().map(MyClass::createReport);
..........

class MyClass {
    public static void createReport(String name, String designation) {
       System.out.println(name+"\t"+designation);
    }
}

Как я могу передать обозначение String через stream (). Map ()?

Ответы [ 4 ]

0 голосов
/ 30 ноября 2018

Приведенный выше ответ очень хорош, но давайте попробуем объяснить, почему вы не смогли запустить свой код:

Ваш код:

names.stream().map(MyClass::createReport);names.stream().map(MyClass::createReport);

Что выполняет JVM

names.stream().map(MyClass::createReport);names.stream().map(name -> MyClass.createReport(name));

Решения использует базовую лямбу в качестве @Eran или функцию, как предложил @Roman.

0 голосов
/ 29 ноября 2018

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

IntStream.range(0, names.size())
         .forEach(i -> MyClass.createReport(names.get(i), names.get(i)));
0 голосов
/ 29 ноября 2018

Вы можете написать карри версию метода createReport.

Curried createReport

Нам необходимо поменять местами порядок аргументов, потому что designation для каждого name одинаков.Кроме того, нам просто нужно вызвать метод без карри.

Function<String, Consumer<String>> createReportCurry = (designation) -> (name) -> {
    createReport(name, designation);
};

В действии

names.stream().forEach(createReportCurry.apply(designation))
0 голосов
/ 29 ноября 2018

Используйте лямбда-выражение:

names.stream().map(name -> MyClass.createReport(name,designation))...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...