Stream流中的常用方法

Stream接口的静态方法of可以获取数组对应的流。
static Stream of (T... values )
参数是一个可变参数。那么我们就可以传递一个数组

两种方法

  • 延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。 (除了终结方法外,其余方
    法均为延迟方法。)
  • 终结方法:返回值类型不再是Stream接口自身类型的方法,因此不再支持类似stringBuilder那样的链式调
    用。本小节中,终结方法包括countforEach方法。

1.逐一处理:forEach

Stream流中的常用方法_第1张图片


Stream<String> stream = Stream.of("张无忌", "张三丰", "周芷若");
		// 示例:使用forEach遍历

		// stream.forEach((String name)->{
		// System.out.println(name);
		// });

		stream.forEach(name -> System.out.println(name)); // 张无忌 张三丰 周芷若

2.过滤处理:filter

Stream流中的常用方法_第2张图片

// 示例:使用filter进行过滤
		Stream<String> stream = Stream.of("王刚", "王二", "孙二", "王子");
		Stream<String> stream2 = stream.filter((String name) -> {
			return !name.endsWith("二");
		});
		stream2.forEach(name -> System.out.println(name));// 王刚 王子

3.统计个数:count

// count方法返回long类型且是终结方法
		ArrayList<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		list.add(5);
		Stream<Integer> str = list.stream();
		System.out.println(str.count()); //5

4.取用前几个:limit

// 取用前几个就写几,是延迟方法
		Stream<String> str1 = Stream.of("A", "B", "C", "D");
		Stream<String> str2 = str1.limit(2);
		str2.forEach(a -> System.out.println(a)); //A B

5.跳过前几个:skip

// 跳过前几个就写几,是延迟方法
		Stream<String> str1 = Stream.of("A", "B", "C", "D");
		Stream<String> str2 = str1.skip(2);
		str2.forEach(a -> System.out.println(a)); //C D

6.合并:concat

Stream<String> str1 = Stream.of("A", "B");
		Stream<String> str2 = Stream.of("C", "D");
		Stream<String> str3 = Stream.concat(str1, str2);
		str3.forEach(a -> System.out.println(a)); //A B C D

7.综合案例

ArrayList<String> part1 = new ArrayList<>();
		part1.add("AAA");
		part1.add("B");
		part1.add("CCC");
		part1.add("DD");
		part1.add("EEEEE");
		part1.add("FFF");
		part1.add("GGG");

		ArrayList<String> part2 = new ArrayList<>();
		part2.add("HHH");
		part2.add("I");
		part2.add("JJJ");
		part2.add("KK");
		part2.add("LLLLL");
		part2.add("MMM");
		part2.add("NNN");

		Stream<String> one = part1.stream().filter(name -> name.length() == 3).limit(3); // 留下ACF
		Stream<String> two = part2.stream().filter(name -> name.length() == 3).skip(2); // 留下MN
		Stream<String> all = Stream.concat(one, two);
		all.forEach(name -> System.out.println(name));

你可能感兴趣的:(Javase学习笔记)