查看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]
* */
}
}