Stream
Stream关注的数据的运算,与cpu打交道
集合关注数据的存储,与内存打交道
实例化
//方式一:容器
//顺序流
Stream<Integer> stream = list.stream();
//并行流
Stream<Integer> parallelStream = list.parallelStream();
//方式二:数组
IntStream stream1 = Arrays.stream(new int[]{1, 2, 3});
//方式三:Stream.of
Stream<Integer> integerStream = Stream.of(1, 2, 4);
//方式四:Stream.iterator 创建无限流 (使用较少)
Stream.iterate(0,t->t+2).limit(10).forEach(System.out::println);
Stream.generate(Math::random).limit(10).forEach(System.out::println);
中间操作
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(9);
list.add(3);
list.add(5);
list.add(2);
list.add(2);
//过滤
list.stream().filter(a->a>3).forEach(System.out::println);
//截断
System.out.println("==========");
list.stream().limit(3).forEach(System.out::println);
//跳过
System.out.println("==========");
list.stream().skip(3).forEach(System.out::println);
//去重
System.out.println("==========");
list.stream().distinct().forEach(System.out::println);
//映射
System.out.println("==========");
list.stream().map(a->a+1).forEach(System.out::println);
//排序
System.out.println("==========");
list.stream().sorted().forEach(System.out::println);
System.out.println("==========");
list.stream().sorted((a,b)->b-a).forEach(System.out::println);
终止操作
//所有都满足
System.out.println("==========");
System.out.println(list.stream().allMatch(a -> a > 3));
//至少有一个满足
System.out.println("==========");
System.out.println(list.stream().anyMatch(a -> a > 3));
//没有元素满足
System.out.println("==========");
System.out.println(list.stream().noneMatch(a -> a > 3));
//返回第一个元素
System.out.println("==========");
System.out.println(list.stream().findFirst());
//返回任意一个元素
System.out.println("==========");
System.out.println(list.stream().findAny());
//返回任意一个元素
System.out.println("==========");
System.out.println(list.stream().count());
//返回最值
System.out.println("==========");
System.out.println(list.stream().max((a,b)->a-b));
System.out.println(list.stream().max((Integer::compare)));
System.out.println(list.stream().max((a,b)->b-a));
//内部迭代
System.out.println("==========");
list.stream().forEach(System.out::println);
//求和
System.out.println("==========");
System.out.println(list.stream().reduce(0,Integer::sum));
//收集
System.out.println("==========");
list.stream().filter(a->a>3).collect(Collectors.toList()).stream().forEach(System.out::println);
optional
import java.util.Optional;
public class OP {
public static void main(String[] args) {
//存一个空
Optional<Object> op1 = Optional.empty();
System.out.println(op1);//Optional.empty
//op1.get();//报错,Exception in thread "main" java.util.NoSuchElementException: No value present
if(!op1.isPresent()){
System.out.println("数据不存在");
}
//存一个值,非空
//get()和of()常搭配使用
Optional<String> op2 = Optional.of("aaa");
System.out.println(op2);//Optional[aaa]
System.out.println("数据存在");
System.out.println(op2.get());//aaa
System.out.println(op2.get().getClass());//class java.lang.String
//存一个值,可以为空
Optional<Object> op3 = Optional.ofNullable(null);
System.out.println(op3);
if(op2.isPresent()){
System.out.println("数据存在");
//System.out.println(op3.get());//报错,Exception in thread "main" java.util.NoSuchElementException: No value present
System.out.println(op3.orElse("bbb"));//bbb
}
}
}