Java Stream.map用法

284 阅读1分钟

查看Stream.map的源码(jdk 1.8.0):

/**
 * Returns a stream consisting of the results of applying the given
 * function to the elements of this stream.
 *
 * <p>This is an <a href="package-summary.html#StreamOps">intermediate
 * operation</a>.
 *
 * @param <R> The element type of the new stream
 * @param mapper a <a href="package-summary.html#NonInterference">non-interfering</a>,
 *               <a href="package-summary.html#Statelessness">stateless</a>
 *               function to apply to each element
 * @return the new stream
 */
 <R> Stream<R> map(Function<? super T, ? extends R> mapper);

简单描述其功能就是:将流中的每个元素,经过特定函数的处理,转换成另一个流输出。

实现方式

方法一:map(类名:类成员方法) : 此方法无法传可变参数

方法二:map(集合元素变量->类名.成员方法(参数)) :此方法可传参数

下面是常见的操作实践:

List<String> 转 List<Integer>

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> strList = new ArrayList<>(3);
        strList.add("12");
        strList.add("12");
        strList.add("32");
        List<Integer> intList = strList.stream().map(Integer::parseInt).collect(Collectors.toList());
        System.out.printf("List<Integer> 数据 : %s \n",intList);
        // List<Integer> 数据 : [12, 12, 32]

        List<Integer> intList2 = strList.stream().map(e->Integer.parseInt(e)).collect(Collectors.toList());
        System.out.printf("List<Integer> 数据 : %s \n",intList2);
        // List<Integer> 数据 : [12, 12, 32]
    }
}

List<String> 转大小写

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> strList = new ArrayList<>(3);
        strList.add("aaAA");
        strList.add("bbBB");
        strList.add("ccCC");
        List<String> upperList = strList.stream().map(String::toUpperCase).collect(Collectors.toList());
        System.out.printf("upperList 数据 : %s \n",upperList);
        List<String> lowerList = strList.stream().map(String::toLowerCase).collect(Collectors.toList());
        System.out.printf("lowerList 数据 : %s \n",lowerList);
        List<String> subList = strList.stream().map(e->e.substring(2)).collect(Collectors.toList());
        System.out.printf("subList 数据 : %s \n",subList);

        /**
         * upperList 数据 : [AAAA, BBBB, CCCC]
         * lowerList 数据 : [aaaa, bbbb, cccc]
         * subList 数据 : [AA, BB, CC]
         * */
    }
}

自定义类实现两数相加

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class Operation {
    private int a;
    private int b;
    Operation(int a,int b){
        this.a = a;
        this.b = b;
    }

    public int sum(){
        return this.a + this.b;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Operation> opeList = new ArrayList<>(3);
        opeList.add(new Operation(1, 3));
        opeList.add(new Operation(5, 1));
        opeList.add(new Operation(42,1));
        List<Integer> sumList = opeList.stream().map(Operation::sum).collect(Collectors.toList());
        System.out.printf("sumList 数据 : %s \n",sumList);
        /**
         * sumList 数据 : [4, 6, 43] 
         * */
    }
}