stream 的获取
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Main {
/**
* 数组转流
*/
static void gen1() {
String[] arr = {"1", "2", "3"};
Stream<String> stream = Stream.of(arr);
stream.forEach(System.out::println);
}
/**
* list 转流
*/
static void gen2() {
List<String> list = Arrays.asList("1", "2", "3");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
}
/**
* 用generate生成流
*/
static void gen3() {
Stream<Integer> stream = Stream.generate(() -> 1);
stream.limit(10).forEach(System.out::println);
}
/**
* 用iterate生成流
*/
static void gen4() {
Stream<Integer> stream = Stream.iterate(1, x -> x + 1);
stream.skip(20).forEach(System.out::println);
}
/**
* 从文件生成流
*
* @throws Exception
*/
static void gen5() throws Exception {
String s = "1234";
IntStream intStream = s.chars();
intStream.forEach(System.out::println);
Files.lines(Paths.get("/Users/xxxxxx/src/main/java/lambda/Main.java")).forEach(System.out::println);
}
}
上一篇文章也提到过,stream的延迟操作
//没有遇到终止操作 不执行filter内的代码
Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> {
System.out.println("不会输出");
return x % 2 == 0;
});
//遇到终止操作才执行 forEach 是终止操作
Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> {
System.out.println("输出");
return x % 2 == 0;
}).forEach(System.out::println);
求和
//输出1-6偶数之和
int sum = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).mapToInt(x->x).sum();
System.out.println(sum);
最大值
//输出1-6最大值
int max = Arrays.asList(1, 2, 3, 4, 5, 6).stream().max((a,b)->a-b).get();
System.out.println(max);
最小值
//输出1-6最小值
int min = Arrays.asList(1, 2, 3, 4, 5, 6).stream().min((a,b)->a-b).get();
System.out.println(min);
查找元素
/**
* 输出1-6 找到任何偶数元素就返回
* findAny:查找任何一个就返回 Optional
* findFirst:查找到第一个就返回 Optional
* anyMatch:匹配上任何一个则返回 Boolean
* allMatch:匹配所有的元素则返回 Boolean
*/
Optional<Integer> optional = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).findAny();
System.out.println(optional.get());
查找第一个元素
//输出1-6 第一个偶数
Optional<Integer> optional = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).findFirst();
System.out.println(optional.get());
排序
//过滤出所有偶数,再倒序
List<Integer> sortList = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).sorted((a, b) -> b - a).collect(Collectors.toList());
System.out.println(sortList);
网友评论