一、Stream 介绍
我们可以把Stream当成一个高级版本的Iterator。
原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;
高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,
比如“过滤掉长度大于10的字符串”、“获取每个字符串的首字母”等,
具体这些操作如何应用到每个元素上,就给Stream就好了!(摘抄自C_time
)
二、Demo
直接上demo理解吧,毕竟都是程序员,只有程序说的才是正确的
package com.stream;
import org.junit.Test;
import java.awt.image.AreaAveragingScaleFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @program: JDK8-java
* @description: 测试Stream流基础特性
* @author: hs
* @create: 2020-11-10 21:16
**/
public class TestStreamBase {
/**
* forEach 循环
*/
@Test
public void foreach(){
List<String> list = new ArrayList<>();
list.add("bb");
list.add("aa");
list.add("cc");
list.stream().forEach(value -> {
System.out.println(value);
});
}
/**
* filter 过滤
*/
@Test
public void filter(){
List<String> list = new ArrayList<>();
list.add("bb");
list.add("aa");
list.add("cc");
list.stream().filter(value -> {
return value.equals("aa");
}).forEach(value -> {
System.out.println(value);
});
}
/**
* sorted 排序
*/
@Test
public void sorted(){
List<String> list = new ArrayList<>();
list.add("bb");
list.add("aa");
list.add("cc");
System.out.println("操作前list:");
list.stream().forEach(value -> {
System.out.print(value+"\t");
});
List<String> collect = list.stream().sorted((a,b) -> {
return a.compareTo(b);
}).collect(Collectors.toList());
System.out.println();
System.out.println("升序排序:"+collect);
collect = list.stream().sorted((a, b) -> {
return b.compareTo(a);
}).collect(Collectors.toList());
System.out.println("降序排序:"+collect);
}
/**
* list集合返回拼接字符串
*/
@Test
public void joinString(){
List<String> list = new ArrayList<>();
list.add("bb");
list.add("aa");
list.add("cc");
System.out.println("操作前list:"+list);
String collect = list.stream().sorted((a, b) -> {
return b.compareTo(a);
}).collect(Collectors.joining(",","前","后"));
System.out.println("操作后:"+collect);
}
/**
* map 匹配操作元素
*/
@Test
public void map(){
List<String> list = new ArrayList<>();
list.add("bb");
list.add("aa");
list.add("cc");
System.out.println("操作前list:"+list);
List<String> collect = list.stream().map(value -> {
if (value.equals("aa")){
return "dd";
}
return value;
}).collect(Collectors.toList());
System.out.println("操作后:"+collect);
}
/**
* flatMap 合并多个数组
*/
@Test
public void flatMap(){
List<String> list = new ArrayList<>();
list.add("aa");
list.add("cc");
List<String> list1 = Arrays.asList("bb");
System.out.println("操作前list:"+list+"\t"+"list1:"+list1);
List<List> lists = Arrays.asList(list,list1);
List<String> collect = (List<String>) lists.stream().flatMap(value -> value.stream()).collect(Collectors.toList());
System.out.println("操作后:"+collect);
}
/**
* reduce 折叠操作,可以对stream中所有的值进行操作
*/
@Test
public void reduce(){
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
Integer sum = list.stream().reduce((value,count) ->{
System.out.println("value:"+value+",count:"+count);
return value += count;
}).get();
System.out.println(sum);
System.out.println("***************");
// 字符串连接,concat = "ABCD"
String concat = Stream.of("A", "B", "C", "D").reduce("", String::concat);
// 求最小值,minValue = -3.0
double minValue = Stream.of(-1.5, 1.0, -3.0, -2.0).reduce(Double.MAX_VALUE, Double::min);
// 求和,sumValue = 10, 有起始值
int sumValue = Stream.of(1, 2, 3, 4).reduce(0, Integer::sum);
// 求和,sumValue = 10, 无起始值
sumValue = Stream.of(1, 2, 3, 4).reduce(Integer::sum).get();
// 过滤,字符串连接,concat = "ace"
concat = Stream.of("a", "B", "c", "D", "e", "F").
filter(x -> x.compareTo("Z") > 0).
reduce("", String::concat);
}
}
图省事直接复制过来了,其实在我理解中,Stream流就是对集合处理的一种升华,使我们处理集合数据更加便利。常见的Stream方法已经贴到上边了,相信不难看懂,更多方法直接查看API文档即可,不过其实这里更多是要实践,我了解这方面的内容也只是想能读懂代码,更深入需要在项目中实践了。
参考博客
个人JDK8新特性练习Demo,已上传至Github,感兴趣的同学可以查看!
至此,完结,撒花
本文通过实战演示 Java 8 中的 Stream API 如何简化集合数据处理。包括 foreach 循环、filter 过滤、sorted 排序、字符串拼接、map 匹配操作等常见用法,并提供示例代码。

4950

被折叠的 条评论
为什么被折叠?



