JAVA SE 8 的流库-1.1从迭代到流的操作

1.1 从迭代到流的操作

在处理集合时,我们通常会迭代遍历它的元素,并在每个元素上执行某项操作。首先,将所有单词放到一个列表中:

String contents = new String(Files.readAllBytes(
           Paths.get("test.txt")),StandardCharsets.UTF_8);
List<String> words = Arrays.asList(contents.split(" "));
          //以“ ” 来分割每个word \\PL+是空格

现在,我们可以迭代它:

long count = 0;
		for (String w : words) {
			if(w.length()>2) count++;
		}

在使用流时,相同操作看起来像下面这样:

count = words.stream().filter(w -> w.length()>2).count();

仅将stream修改为parallelStream就可以让流库以并行方式来执行过滤和计数。

count = words.parallelStream().filter(w -> w.length()>2).count();
  • 流并不存储元素。这些元素可能存储在底层集合中,或者是按需生成的。
  • 流的操作不会修改器数据源。例如:filter方法不会从新的流中已出元素,而是会生成新的流,其中不包含被过滤的元素。
  • 流的操作是尽可能惰性执行的。这意味着直至需要其结果时,操作才会执行。例如:我们只想操作前五个单词,那么filter就会匹配到第五个单词停止过滤。因此我们可以操作无限流。

以上操作,我们建立了一个包含三个阶段的操作管道:

  1. 创建一个流。
  2. 指定将初始流转换为其他流的中间操作,可能包含多个步骤。
  3. 应用终止操作,从而产生结果。这个操作会强制执行之前的惰性操作。从此之后,这个流就再也不能使用了。
count = words.parallelStream().filter(w -> w.length()>2).count();

例如这段代码,用parallelStream方法创建流,filter方法对其进行转换,count方法是终止操作,当执行到count时,前面的惰性操作才会被执行。
(如有问题,请评论处指正!)

package JavaSE8的流库;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;

public class CountLongWords {

	public static void main(String[] args) throws IOException {
		String contents = new String(Files.readAllBytes(
		          Paths.get("D:\\eclipse\\test.txt")),StandardCharsets.UTF_8);
		List<String> words = Arrays.asList(
		          contents.split(" "));//以“ ” 来分割每个word \\PL+是空格
		System.out.println(contents);
		System.out.println(words);
		
		long count = 0;
		for (String w : words) {
			if(w.length()>2) count++;
		}
		System.out.println(count);
		
		count = words.stream().filter(
		              w -> w.length()>2).count();
		              //filter 过滤会产生一个新的流 不包含过滤掉的元素
		System.out.println(count);
		
		count = words.parallelStream().filter(
		             w -> w.length()>2).count();
		             //parallelStream 可以让流库以并行的方式执行过滤和计数
		System.out.println(count);
	}
}

猜你喜欢

转载自blog.csdn.net/z036548/article/details/84146837