Автор оригинала: Pankaj Kumar.
Функция потоковой карты Java 8 может использоваться для выполнения некоторых операций со всеми ее элементами. Карта потока Java является промежуточной операцией, поэтому она возвращает поток.
Карта потоков Java 8
Ниже приведен метод map, объявленный в потоковом интерфейсе Java 8.
Stream map(Function super T, ? extends R> mapper);
Метод потоковой карты принимает Функцию
в качестве аргумента, который является функциональным интерфейсом .
Давайте теперь рассмотрим какой-нибудь пример, в котором метод потоковой карты становится полезным.
Пример карты потоков Java
Предположим, у нас есть список имен, и мы хотим найти, какие из них присутствуют в какой-либо таблице базы данных Oracle. Теперь, поскольку Oracle учитывает регистр, мы можем преобразовать список строк в верхний регистр, а затем на стороне базы данных мы можем использовать метод to_upper с SQL-запросом.
Обычно до java 8 мы можем сделать это с помощью цикла for, как показано ниже.
Listnames = Arrays.asList("Pankaj", "amit", "DAVID"); List upperCaseNames = new ArrayList<>(); for (String n : names) { upperCaseNames.add(n.toUpperCase()); } // now send upperCaseNames for processing
Мы можем сделать то же самое, используя функцию отображения потока java, как показано ниже в одной строке.
upperCaseNames = names.stream().map(t -> t.toUpperCase()).collect(Collectors.toList());
Мы также можем написать это, как показано ниже.
upperCaseNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());
Пример карты потока Java с объектами
Теперь давайте рассмотрим более практический пример использования потоковой карты. У нас есть класс Emp, как показано ниже.
package com.journaldev.examples; public class Emp { private int id; private String name; private long salary; private String designation; public Emp(int i, String n, long s, String d) { this.id = i; this.name = n; this.salary = s; this.designation = d; } @Override public String toString(){ return id+name+salary+designation; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } }
У нас есть способ получить все данные о сотрудниках. Теперь мы хотим передать данные о сотрудниках в систему управления персоналом, но не хотим раскрывать зарплату. Поэтому нам придется использовать приведенный ниже код для обработки каждого сотрудника и удаления его зарплаты.
ListempForHR = new ArrayList<>(); for(Emp e : allEmpList){ Emp temp = new Emp(e.getId(),e.getName(),e.getSalary(),e.getDesignation()); temp.setSalary(0); empForHR.add(temp); }
Теперь, используя функцию потоковой карты java 8, мы можем сделать то же самое, как показано ниже.
empForHR = allEmpList.stream().map(e -> { e.setSalary(0L); return e; }).collect(Collectors.toList());
Ниже приведен окончательный пример программы для java stream map с преобразованием объектов.
package com.journaldev.examples; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class JavaStreamMapExample { public static void main(String[] args) { ListallEmpList = getAllEmps(); System.out.println(allEmpList); List empForHR = new ArrayList<>(); for(Emp e : allEmpList){ Emp temp = new Emp(e.getId(),e.getName(),e.getSalary(),e.getDesignation()); temp.setSalary(0); empForHR.add(temp); } System.out.println(empForHR); empForHR = allEmpList.stream().map(e -> { e.setSalary(0L); return e; }).collect(Collectors.toList()); System.out.println(empForHR); } private static List getAllEmps() { List el = new ArrayList<>(); Emp e1 = new Emp(1, "Pankaj", 100L, "SE"); el.add(e1); Emp e2 = new Emp(2, "David", 200L, "QE"); el.add(e2); Emp e3 = new Emp(3, "Lisa", 300L, "CEO"); el.add(e3); return el; } }
Когда мы запускаем вышеуказанную программу, мы получаем результат ниже.
[1Pankaj100SE, 2David200QE, 3Lisa300CEO] [1Pankaj0SE, 2David0QE, 3Lisa0CEO] [1Pankaj0SE, 2David0QE, 3Lisa0CEO]
Мы также можем преобразовать объект Emp в какой-либо другой объект в реализации функции метода map.
Это все для примеров потоковой карты java 8.
Ссылка: Официальный JavaDoc