package stream; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Stream; public final class StreamTest { private StreamTest() { } public static void main(String[] args) throws Exception { // 基于数组创建Stream Stream stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty"); stream = Stream.empty(); // 创建空的Stream System.out.println(stream.getClass().getCanonicalName()); Stream randomGen = Stream.generate(Math::random); // 基于生成器创建的Stream randomGen.limit(10).forEach(System.out::println); try (Stream lines = Files.lines(Paths.get("pom.xml"))) { lines.limit(1).forEach(System.out::println); } stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty"); Predicate lenPredicate = str -> str.length() > 3; stream = stream.filter(lenPredicate); // filter方法接受一个Predicate类型的函数 stream.map(s -> "Hello " + s).forEach(System.out::println); // 使用map函数对集合进行转化 stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty"); Stream charStream = stream.flatMap(w -> charStream(w)); // 将多个流进行平铺 charStream.forEach(System.out::println); stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty"); Optional maxLengthName = stream.max((str1, str2) -> Integer.compare(str1.length(), str2.length())); System.out.println(">>>> max length name:" + maxLengthName.get()); stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty"); Optional startsWithJ = stream.filter(str -> str.startsWith("J")).findFirst(); System.out.println(">>>> first with J:" + startsWithJ.get()); stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty"); startsWithJ = stream.parallel().filter(str -> str.startsWith("J")).findAny(); System.out.println(">>>> any with J:" + startsWithJ.get()); startsWithJ.ifPresent(System.out::println); // 如果不为null,那么可以指定处理此值的函数 Optional withHello = startsWithJ.map(s -> String.format("Hello %s", s)); System.out.println(withHello.orElse("")); stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty"); boolean hasStartsWithJ = stream.parallel().anyMatch(s -> s.startsWith("J")); System.out.println(">>>> starts with j:" + hasStartsWithJ); } public static Stream charStream(String s) { List result = new ArrayList<>(); for (char c : s.toCharArray()) { result.add(c); } return result.stream(); } }