Stream map()转化成新的类型流

Posted 爆米花9958

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Stream map()转化成新的类型流相关的知识,希望对你有一定的参考价值。

它返回一个由给定函数处理的 Stream 实例。 map()返回对象流,为了得到IntStream、LongStream、DoubleStream等原始数据类型的流,Java8 stream分别提供了mapToInt()、mapToLong()和mapToDouble()方法。

map()函数

Stream.map () 方法如下。

map(Function mapper)

我们需要将 Function 实例作为 lambda 表达式传递。此方法返回具有给定函数处理结果的 Stream 实例。这是一个中间操作。

使用 Stream map() 将 Map 转换为 List

在这里,我们将使用 Stream.map() 作为中间操作将 HashMap 转换为对象列表。

public class MapToList {
	public static void main(String[] args) {
		Map<Integer, String> map = new HashMap<>();
		map.put(111, "Lalkrishna");
		map.put(154, "Atal");		
		map.put(30, "Narendra");
		map.put(200, "Amit");
		
		List<User> list = map.entrySet().stream().sorted(Comparator.comparing(e -> e.getKey()))
				.map(e -> new User(e.getKey(), e.getValue())).collect(Collectors.toList());

		list.forEach(l -> System.out.println("Id: "+ l.getId()+", Name: "+ l.getName()));		
	}
}
class User {
	private int id;
	private String name;
	public User(int id, String name) {
		this.id = id; 
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public String getName() {
		return name;
	}
} 

输出

Id: 30, Name: Narendra
Id: 111, Name: Lalkrishna
Id: 154, Name: Atal
Id: 200, Name: Amit 

使用 Stream map() 将 List 转换为另一个 List

在这个例子中,我们将使用 Stream.map() 作为中间操作将一个对象的 List 转换为另一个不同对象的 List。

public class ListToAnotherList {
	public static void main(String[] args) {
		Person p1 = new Person(1, "Mohan", "student");
		Person p2 = new Person(2, "Sohan", "teacher");
		Person p3 = new Person(3, "Dinesh", "student");
		List<Person> personList = Arrays.asList(p1, p2, p3);
		
		List<Student> stdList = personList.stream().filter(p -> p.getPersonType().equals("student"))
			.map(p -> new Student(p.getId(), p.getName()))
			.collect(Collectors.toList());
		
		stdList.forEach(e -> System.out.println("Id:"+ e.getId()+ ", Name: "+ e.getName()));
	}
}
class Person {
	private int id;
	private String name;
	private String personType;
	public Person(int id, String name, String personType) {
		this.id = id;
		this.name = name;
		this.personType = personType;
	}
	public int getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public String getPersonType() {
		return personType;
	}
}
class Student {
	private int id;
	private String name;
	public Student(int id, String name) {
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public String getName() {
		return name;
	}
} 

输出

Id:1, Name: Mohan
Id:3, Name: Dinesh

Stream mapToInt()示例

这里我们提供了 mapToInt() 的例子,我们可以用同样的方式来处理 mapToLong() 和 mapToDouble()。

public class MapToIntDemo {
	public static void main(String[] args) {
		Employee e1 = new Employee(1, 20);
		Employee e2 = new Employee(2, 15);
		Employee e3 = new Employee(3, 30);
		List<Employee> list = Arrays.asList(e1, e2, e3);
		int sum = list.stream().mapToInt(e -> e.getAge()).sum();
		System.out.println("Sum: "+ sum);
	}
}
class Employee {
	private int id;
	private int age;
	public Employee(int id, int age) {
		this.id = id; 
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public int getAge() {
		return age;
	}
} 

输出

Sum: 65

参考:

https://www.concretepage.com/java/jdk-8/java-8-stream-map-example

https://blog.csdn.net/qq_31635851/article/details/111355079

以上是关于Stream map()转化成新的类型流的主要内容,如果未能解决你的问题,请参考以下文章

Stream map()转化成新的类型流

Stream map()转化成新的类型流

Java8 Stream流

java.util.stream map和flatmap的区别

java8 .stream().sorted().filter().map().collect()用法

java stream Api