①. Stream 流的常见生产方式
- ①. Collection体系的集合可以使用默认方法stream()生成流
default Stream<E> stream()
- ②. Map体系的集合间接的生成流
- ③. 数组可以通过Stream接口的静态方法of(T… values)生成流
public class StreamDemo { public static void main(String[] args) { //Collection体系的集合可以使用默认方法stream()生成流 List<String> list = new ArrayList<String>(); Stream<String> listStream = list.stream(); Set<String> set = new HashSet<String>(); Stream<String> setStream = set.stream(); //Map体系的集合间接的生成流 Map<String,Integer> map = new HashMap<String, Integer>(); Stream<String> keyStream = map.keySet().stream(); Stream<Integer> valueStream = map.values().stream(); Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream(); //数组可以通过Stream接口的静态方法of(T... values)生成流 String[] strArray = {"hello","world","java"}; Stream<String> strArrayStream = Stream.of(strArray); Stream<String> strArrayStream2 = Stream.of("hello", "world", "java"); Stream<Integer> intStream = Stream.of(10, 20, 30); } }
②. forEach Consumer
①. 然方法名字叫forEach ,但是与for循环中的“for-each”昵称不同
void forEach(Consumer<? super T> action);
②. java.util.function.Consumer<T>接口是一个消费型接口。Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据。
Stream<String> st1 = Stream.of("张三","李四","王二","麻子"); st1.forEach(System.out::println); // 等同于如下代码 // st1.forEach(s -> System.out.println(s));
③. filter Predicate
①. Stream<T> filter(Predicate predicate):用于对流中的数据进行过滤
②. Predicate接口中的方法 boolean test(T t):对给定的参数进行判断,返回一个布尔值
③. java.util.stream.Predicate函数式接口唯一的抽象方法为boolean test(T t);,该方法将会产生一个boolean值结果,代表指定的条件是否满足。如果结果为true,那么Stream流的filter方法将会留用元素;如果结果为false,那么filter方法将会舍弃元素
public class StreamDemo01 { public static void main(String[] args) { //创建一个集合,存储多个字符串元素 ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //需求1:把list集合中以张开头的元素在控制台输出 // list.stream().filter((String s) -> { // return s.startsWith("张"); // }).forEach(System.out::println); list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println); System.out.println("--------"); //需求2:把list集合中长度为3的元素在控制台输出 list.stream().filter(s -> s.length() == 3).forEach(System.out::println); System.out.println("--------"); //需求3:把list集合中以张开头的,长度为3的元素在控制台输出 list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).forEach(System.out::println); } }