栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Stream流

Java 更新时间:发布时间: 百科书网 趣学号
Stream 生成方式 生成流

通过数据源(集合、数组等)生成流

list.stream()

常见生成方式

  • Collection体系的集合可以直接使用默认方法stream()生成流

  • //Collection生成流
            ArrayList list = new ArrayList<>();
            HashSet set = new HashSet<>();
            Stream listStream = list.stream();
            Stream setStream = set.stream();
    
  • Map体系集合间接生成流

  • //Map生成流
            HashMap map = new HashMap<>();
            Stream keyStream = map.keySet().stream();
            Stream valueStream = map.values().stream();
            Stream> entryStream = map.entrySet().stream();//键值对对象流
    
  • 数组可以通过Stream接口的静态方法of(T…values)生成流

  • //数组生成流
            String[] strArray = {"hello","world","java"};
            Stream strArrayStream = Stream.of(strArray);
            Stream strArrayStream2 = Stream.of("hello", "world", "java");
            Stream integerStream = Stream.of(1, 2, 3, 4);
    
中间操作

一个流后面可以跟随任意个中间操作,目的是打开流,做出过滤或映射等操作,再返回一个新的流

list.stream().filter()//通常使用Lambda表达式完成规则表达

常见操作方法

  • filter(Predicate predicate):用于对流中的数据进行过滤

    Predicate接口中的方法 boolean test(T t):对给定参数进行判断,返回一个布尔值

    ArrayList list = new ArrayList<>();
            list.add("林青霞");
            list.add("张曼玉");
            list.add("王祖贤");
            list.add("柳岩");
            list.add("张敏");
            list.add("张无忌");
            list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(System.out::println);
            list.stream().filter(s->s.startsWith("张")).forEach(System.out::println);
            list.stream().filter(s->s.length()==3).forEach(System.out::println);
    
  • limit(long maxSize):截取前指定个参数个数的数据

    ArrayList list = new ArrayList<>();
            list.add("林青霞");
            list.add("张曼玉");
            list.add("王祖贤");
            list.add("柳岩");
            list.add("张敏");
            list.add("张无忌");
            list.stream().limit(3).forEach(System.out::println);
    
  • skip(long n):跳过指定个数参数

    ArrayList list = new ArrayList<>();
            list.add("林青霞");
            list.add("张曼玉");
            list.add("王祖贤");
            list.add("柳岩");
            list.add("张敏");
            list.add("张无忌");
    
            list.stream().skip(3).forEach(System.out::println);
            list.stream().skip(2).limit(2).forEach(System.out::println);
    
  • concat(Stream a,Stream b):合并两个流为一个流(静态方法,通过Stream接口名进行调用)

    ArrayList list = new ArrayList<>();
            list.add("林青霞");
            list.add("张曼玉");
            list.add("王祖贤");
            list.add("柳岩");
            list.add("张敏");
            list.add("张无忌");
    
            Stream s1 = list.stream().limit(4);
            Stream s2 = list.stream().skip(2);
            Stream.concat(s1,s2).forEach(System.out::println);
    
  • distinct():返回由该流中不同的元素组成的流(根据Object.equals(Object))

    Stream s1 = list.stream().limit(4);
    Stream s2 = list.stream().skip(2);
    Stream.concat(s1,s2).distinct().forEach(System.out::println);
    
  • sorted():自然排序 sorted(Comparator comparator):根据Comparator排序

    ArrayList list = new ArrayList<>();
            list.add("linqingxia");
            list.add("zhangmanyu");
            list.add("wangzuxian");
            list.add("liuyan");
            list.add("zhangmin");
            list.add("zhangwuji");
    		//自然排序
            list.stream().sorted().forEach(System.out::println);
    		//指定排序
    //        list.stream().sorted(new Comparator() {
    //            @Override
    //            public int compare(String o1, String o2) {
    //                return o1.length()-o2.length();
    //            }
    //        }).forEach(System.out::println);
            list.stream().sorted((s1,s2)->{int num = s1.length()-s2.length();
                                            int num2 = num==0?s1.compareTo(s2):num;
                                            return num2;}).forEach(System.out::println);
    
  • map(Function mapper):返回由指定函数应用于此流的元素的结果组成的流

    Function接口中的方法 R apply(T t),接受一个T类型参数,返回一个R类型结果

    ArrayList list = new ArrayList<>();
    list.add("25");
    list.add("58");
    list.add("24");
    list.add("785");
    list.add("1354");
    list.add("355");
    
    list.stream().map(Integer::parseInt).forEach(System.out::println);
    
  • mapToInt(ToIntFunction mapper):返回一个IntStream(独有方法sum())

    int sum = list.stream().mapToInt(Integer::parseInt).sum();
    System.out.println("总和:"+sum);
    
终结操作

一个流只能有一个终结操作

list.stream().filter().forEach()

常见终结操作

  • forEach(Consumer action):对流中的每个元素进行操作

    Consumer接口中的方法 void accept(T t):对给定的参数执行操作

    ArrayList list = new ArrayList<>();
    list.add("林青霞");
    list.add("张曼玉");
    list.add("王祖贤");
    list.add("柳岩");
    list.add("张敏");
    list.add("张无忌");
    
    list.stream().forEach(System.out::println);
    
  • long count():返回此流中元素的个数

    long count = list.stream().count();
    System.out.println("元素个数为:"+count);
    
收集操作

使用collect(Collector collector)方法

Collector接口,需要使用Collectors类来实现其功能

Collectors类

软件包 java.util.stream

static Collector>toSet()返回一个 Collector ,将输入元素累加到一个新的 Set 。
static Collector>toList()返回一个 Collector ,将输入元素累加到一个新的 List 。
static Collector>toMap(Function keyMapper, Function valueMapper)返回一个 Collector ,它将元素累加到 Map其键和值是将提供的映射函数应用于输入元素的结果。两个参数,一个是key,一个是value
List list1 = list.stream().limit(3).collect(Collectors.toList());
list1.forEach(System.out::println);
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/957242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号