Автор оригинала: 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) {
List allEmpList = 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