Stream流的基本使用
- Stream流的思想:
创建一条数据流水线,经过中间方法层层过滤,最后经过终结方法,输出一条新的流。
- Stream流的过程
获取Stream流:创建一条流水线,并放置准备数据
中间方法:对这条流上的准备数据可以任意操作,多次操作
终结方法:Stream流的终止方法
- Stream流的创建方法
单列集合:集合对象.Stream()
双列集合:集合对象.keySet().Stream()或者集合对象.entrySet().Stream()
数组对象:Arrays.Stream(数组对象)
基本数据:Stream.of(数据)
代码演示
import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Demo {
public static void main(String[] args) {
getStream1();
getStream2();
getStream3();
getStream4();
}
private static void getStream4() {
Stream<Integer> stream = Stream.of(1, 2, 3, 4);
stream.forEach(s-> System.out.println(s));
}
private static void getStream3() {
int[] arr = {1,2,3,4,5};
IntStream stream = Arrays.stream(arr);
stream.forEach(s -> System.out.println(s));
}
private static void getStream2() {
HashMap<String,String> map = new HashMap<>();
map.put("张","三三");
map.put("李","四四");
map.put("王","五五");
Stream<Map.Entry<String, String>> stream1 = map.entrySet().stream();
stream1.forEach(s -> System.out.println(s));
Stream<String> stream2 = map.keySet().stream();
stream2.forEach(s -> System.out.println(s));
}
private static void getStream1() {
List<String> list1 = new ArrayList<>();
list1.add("张三");
list1.add("李四");
list1.add("王五");
Stream<String> stream = list1.stream();
stream.forEach(s -> System.out.println(s));
}
}
- Stream流的中间方法
Stream filter(Predicate predicate): 对流中的数据进行过滤,重写Predicate接口的boolean test(T t)
Stream limit(long maxSize): 截取指定参数个数的数据
Stream skip(long n): 跳过指定参数个数的数据
static Stream concat(Stream a, Stream b): 合并两个流
Stream distinct(): 去除重复元素
代码演示
import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Demo {
public static void main(String[] args) {
getStream1();
getStream2();
}
private static void getStream2() {
List<String> list1 = new ArrayList<>();
list1.add("张三");
List<String> list2 = new ArrayList<>();
list2.add("李四");
Stream<String> concat = Stream.concat(list1.stream(), list2.stream());
concat.forEach(s -> System.out.println(s));
}
private static void getStream1() {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("张三三");
list.add("张三三");
list.add("张二三");
list.add("李四四");
list.stream().filter(s ->
// 首先筛选张开头的
s.startsWith("张")).
// 截取4条数据
limit(4).
// 跳过前两条
skip(2).
// 去除重复
distinct().
// 遍历打印
forEach(s -> System.out.println(s));
}
}
- Stream流的终结方法
void forEach(Consumer action): 重写Consumer接口中的accept方法,对流中的每个元素进行操作
long count(): 返回此流中的元素数
- Stream流的收集方法
R collect(Collector collector)
public static Collector toList(): 把元素收集到List集合中
public static Collector toSet(): 把元素收集到Set集合中
public static Collector toMap(Function keyMapper, Function valueMapper): 把元素收集到Map集合中
代码演示
import java.util.*;
import java.util.stream.Collectors;
public class Demo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三,23");
list.add("李四,24");
list.add("王五,25");
Map<String, String> map = list.stream().filter(s ->
{
String[] split = s.split(",");
int age = Integer.parseInt(split[1]);
return age >= 24;
}).collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));
System.out.println(map);
}
}