目录
认识Stream
什么是Steam
- 也叫Stream流,是JDK8开始新增的一套API ( java.util.stream.*),可以用于操作集合或者数组的数据。
- 优势:Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作集合或者数组中的数据,代码更简洁,可读性更好。
体验Stream流
需求
List<String> list = new ArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰");
- 把集合中所有以“张”开头,且是3个字的元素存储到一个新的集合。
使用ListAPI
public class streamTest1 {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
Collections.addAll(names,"张三丰","张无忌","周芷若","赵敏","张强");
System.out.println(names);
System.out.println("------------------");
//找出姓张、且是3个字的名字,存入到一个新集合中去
List<String> list = new ArrayList<>();
for(String name:names){
if(name.startsWith("张") && name.length() == 3){
list.add(name);
}
}
System.out.println(list);
}
}
运行结果:
使用Stream流
package Stream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class streamTest1 {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
Collections.addAll(names,"张三丰","张无忌","周芷若","赵敏","张强");
System.out.println(names);
System.out.println("------------------");
//找出姓张、且是3个字的名字,存入到一个新集合中去
//开始使用Stream流来解决这个问题
List<String> list2 = names.stream().filter(s -> s.startsWith("张"))
.filter(a -> a.length()==3).collect(Collectors.toList());
System.out.println(list2);
}
}
运行结果是同样的:
Stream流的使用步骤
获取Stream流的方法
- 获取集合的Stream流
Collection提供的如下方法 | 说明 |
---|---|
default Stream<E> stream() | 获取当前集合对象的Stream流 |
- 获取数组的Stream流
Arrays类提供的如下方法 | 说明 |
---|---|
public static<T> Stream<T> stream( T[] array ) | 获取当前数组的stream流 |
Stream类提供的如下方法 | 说明 |
---|---|
public static<T> Stream<T> of(T...values) | 获取当前接收数据的stream流 |
获取List集合的Stream流
获取Set集合的Stream流
import java.util.*;
import java.util.stream.Stream;
public class streamTest2 {
public static void main(String[] args) {
//2.获取Set集合的Stream流
Set<String> set = new HashSet<>();
Collections.addAll(set,"刘德华","张曼玉","蜘蛛精","马德","德玛西亚");
Stream<String> stream1 = set.stream();
//顺带遍历出名字带“德”的
stream1.filter(s -> s.contains("德")).forEach(s -> System.out.println(s));
}
}
运行结果:
获取Map集合的Stream流
import java.util.*;
import java.util.stream.Stream;
public class streamTest2 {
public static void main(String[] args) {
//3.获取Map集合的Stream流
Map<String,Double> map = new HashMap<>();
map.put("古力娜扎",172.3);
map.put("迪丽热巴",168.3);
map.put("马尔扎哈",166.3);
map.put("卡尔扎巴",168.3);
//键
Set<String> keys = map.keySet();
Stream<String> ks = keys.stream();
//值
Collection<Double> values = map.values();
Stream<Double> vs = values.stream();
//键+值
Set<Map.Entry<String,Double>> entries = map.entrySet();
Stream<Map.Entry<String,Double>> kvs = entries.stream();
//遍历出键中包含“巴”字的元素
kvs.filter(e -> e.getKey().contains("巴"))
.forEach(e -> System.out.println(e.getKey() + "-->" + e.getValue()));
}
}
运行结果:
获取数组的Stream流
END
学习自:黑马程序员——Java课程