Рубрики
Без рубрики

Карта потоков Java 8

Пример карты потока Java 8, пример кода функции карты потока Java, код лямбда-выражения промежуточной операции карты потока Java, метод применения функции.

Автор оригинала: Pankaj Kumar.

Функция потоковой карты Java 8 может использоваться для выполнения некоторых операций со всеми ее элементами. Карта потока Java является промежуточной операцией, поэтому она возвращает поток.

Карта потоков Java 8

Ниже приведен метод map, объявленный в потоковом интерфейсе Java 8.

 Stream map(Function mapper);

Метод потоковой карты принимает Функцию в качестве аргумента, который является функциональным интерфейсом .

Давайте теперь рассмотрим какой-нибудь пример, в котором метод потоковой карты становится полезным.

Пример карты потоков Java

Предположим, у нас есть список имен, и мы хотим найти, какие из них присутствуют в какой-либо таблице базы данных Oracle. Теперь, поскольку Oracle учитывает регистр, мы можем преобразовать список строк в верхний регистр, а затем на стороне базы данных мы можем использовать метод to_upper с SQL-запросом.

Обычно до java 8 мы можем сделать это с помощью цикла for, как показано ниже.

List names = 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;
	}

}

У нас есть способ получить все данные о сотрудниках. Теперь мы хотим передать данные о сотрудниках в систему управления персоналом, но не хотим раскрывать зарплату. Поэтому нам придется использовать приведенный ниже код для обработки каждого сотрудника и удаления его зарплаты.

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);
	}

Теперь, используя функцию потоковой карты 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