认识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