廖雪峰Java16函数式编程-2Stream-7其他操作

匿名 (未验证) 提交于 2019-12-02 21:52:03
Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口) Stream<T> sorted(Comparator<? super T> cp); //按指定Comparator比较的结果排序
    public static void main(String[] args){         Stream<String> s = Stream.of("hello","JAVA","python","RUBY","PHP");         s.sorted().forEach(str-> System.out.print(str+"\t"));         System.out.println();         Stream<Integer> s1 = Stream.of(1,9,5,3,7);         s1.sorted(Comparator.reverseOrder()).forEach(str-> System.out.print(str+"\t"));      }

Stream<T> distinct(); //返回去除重复元素的Stream
        Stream<String> s = Stream.of("hello","JAVA","hello","RUBY","JAVA");         s.distinct().forEach(str-> System.out.print(str+"\t"));

Stream<T> limit(long); //截取Stream前long个元素 Stream<T> skip(long); //跳过Stream前long个元素
        Stream<String> s = Stream.of("hello","JAVA","hello","RUBY","JAVA");         s.limit(3).forEach(str-> System.out.print(str+"\t"));         System.out.println();         Stream<Integer> s1 = Stream.of(1,9,5,3,7);         s1.skip(3).forEach(str-> System.out.print(str+"\t"));

        Stream<String> s1 = Stream.of("php","JAVA","python");         Stream<String> s2 = Stream.of("android", "ios");         Stream<String> s = Stream.concat(s1,s2);         s.forEach(str-> System.out.print(str+"\t"));

把元素映射为Stream,然后合并成一个新的Stream

        List<String> s1 = new ArrayList<>();         s1.add( "php");         s1.add("JAVA");         s1.add("python");         List<String> s2 = Arrays.asList("android", "ios");         Stream<List> l = Stream.of(s1,s2);         Stream<String> s = l.flatMap(list -> list.stream());         s.forEach(str-> System.out.print(str+"\t"));

Stream的元素是串行处理的,也就是只能用单线程来处理,如果要提高效率,比如进行并行排序,只需使用parallel()就可以把一个Stream变成一个并行处理的Stream,通过这个方法调用,后续的操作会尽量的并行处理。

        Stream<String> s = Stream.of("php","JAVA","python","android", "ios");         String[] result = s.parallel() //变成一个可以并行处理的Stream             .sorted(). //可以进行并行排序             toArray(String[]::new);          System.out.println(Arrays.toString(result));

Optional<T> reduce(BinaryOperater<T> bo) long count() T max(Comparator<? super T> cp)//查找最大元素 T min(Comparator<? super T> cp) //查找最下元素

针对IntStream, longStream, DoubleStream:

    sum() //求和     average() //求平均值
        Integer[] nums = {1,2,3,4,5,6};         long max = Stream.of(nums).max((i1,i2)->i1.compareTo(i2)).get();         long min = Stream.of(nums).min((i1,i2)->i1.compareTo(i2)).get();         System.out.println("最大值:"+max+"\t最小值:"+min);         IntStream ins1 = IntStream.builder().add(1).add(2).add(3).add(4).add(5).add(6).build();         IntStream ins2 = IntStream.builder().add(1).add(2).add(3).add(4).add(5).add(6).build();         Double avg = ins1.average().getAsDouble();         long sum = ins2.sum();         System.out.println("求和:"+sum+"\t平均值:"+avg);

boolean allMatch(Predicate<? super T>) //所有元素均满足测试条件 boolean anyMatch(Predicate<? super T>) //至少一个元素满足测试条件
        Integer[] nums = {1,2,3,4,5,6};         boolean max = Stream.of(nums).allMatch(x->x>0);         boolean min = Stream.of(nums).anyMatch(x->x>5);         System.out.println("元素全部>0:"+max+"\t存在元素>5:"+min);

void forEach(Consumer<? super T> action)
Object[] toArray() //转换为Object数组 A[] toArray(IntFunction<A[]>) //转换为A[]数组 <R, A> R collect(Collector<? super T, A, R> Collector) //转换为List/Set等集合类型
        Stream<String> s1 = Stream.of("php","JAVA","python","android", "ios");         String[] arr = s1.toArray(String[]::new);         Stream<String> s2 = Stream.of("php","JAVA","python","android", "ios");         List<String> list = s2.collect(Collectors.toList());         System.out.println(Arrays.toString(arr));         System.out.println(list.toString());

java.util.stream.Stream题哦那个了许多实用的功能

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!