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
以上是关于Stream map()转化成新的类型流的主要内容,如果未能解决你的问题,请参考以下文章
java.util.stream map和flatmap的区别