Java8 - 通过实例学习Stream map方法

350 阅读2分钟

流映射方法介绍

map()方法将对象映射到同一类型或不同类型的其他对象。它是处理对象流的中间操作

它们被懒洋洋地调用,接受作为函数的输入,输出对象流,其中包含对流中每个元素应用函数的结果。

语法

  Stream map(Function mapper)

map方法接受Function作为输入。该函数是一个功能接口,有一个抽象的方法
,接受T类型的输入并返回R类型的输出。

地图过滤器的例子

这是一个包含数字的List of String的例子,其输入和输出都是偶数。

  • 创建字符串列表
  • 从列表中创建流
  • 用lambda表达式调用map()方法来遍历元素流
  • 对每个元素应用过滤器以检查事件编号
  • 最后,通过终端操作收集,将流转换为List
List listStringNumbers = Arrays.asList("11", "12", "31", "41", "15", "16");  
System.out.println(listStringNumbers);  
List eventNumbers = listStringNumbers.stream()  
    .map(s -> Integer.valueOf(s))  
 .filter(number -> number % 2 == 0)  
    .collect(Collectors.toList());  
System.out.println(eventNumbers);  

输出是

[11, 12, 31, 41, 15, 16]  
[12, 16]  

如何使用流将Map转换为List?

这是一个将hashmap转换为自定义java对象的例子。
使用流的lambda表达式,迭代哈希图元素,构建对象。

  
import java.util.Comparator;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
import java.util.stream.Collectors;  
public class MapExample {  
 public static void main(String[] args) {  
  Map map = new HashMap<>();  
  map.put("1", "Kiran");  
  map.put("12", "Ram");  
  map.put("13", "John");  
  map.put("5", "Frank");  
  List listOfObjects = map.entrySet().stream().sorted(Comparator.comparing(e -> e.getKey()))  
    .map(e -> new MyObject(e.getKey(), e.getValue())).collect(Collectors.toList());  
  
  listOfObjects.forEach(l -> System.out.println("Id: " + l.getId() + ", Name: " + l.getName()));  
 }  
}  
class MyObject {  
 private String id;  
 private String name;  
  
 public MyObject(String id, String name) {  
  this.id = id;  
  this.name = name;  
 }  
 public String getId() {  
  return id;  
 }  
 public String getName() {  
  return name;  
 }  
}  

输出是

Id: 1, Name: Kiran  
Id: 12, Name: Ram  
Id: 13, Name: John  
Id: 5, Name: Frank  

如何将List of String转换为大写或小写?

从List创建一个流,在每个字符串上调用map,转换并输出到控制台。

List listString= Arrays.asList("one", "two", "three", "four", "five");  
listString.stream().map(String::toUpperCase).forEach(System.out::println);  

输出结果是

ONE  
TWO  
THREE  
FOUR  
FIVE  

mapToInt - IntStream mapToInt ( ToIntFunction mapper )
它接收ToIntFunction作为参数并返回IntStreamToIntFunction是一个功能接口,有一个抽象方法,接受整数值并生成一个结果。IntStream是Stream类的整数版本。流中的每个元素都被应用到函数中。
mapToLong - LongStream mapToLong ( ToLongFunction mapper )

它接受ToLongFunction作为一个参数并返回LongStreamToLongFunction是一个功能接口,它有一个抽象的方法,接收输入的长值并输出结果。LongStream是Stream类的一个长版本。流中的每个元素都被应用到函数中

mapToDouble - DoubleStream mapToDouble ( ToDoubleFunction mapper )

它接受ToDoubleFunction作为参数并返回DoubleStreamToDoubleFunction是一个功能接口,它有一个抽象的方法,接受输入的双倍值并输出结果。DoubleStream是Stream类的一个双倍版本。流中的每个元素都被应用到函数中。