Java中处理集合利器------stream流

news/2025/2/23 8:58:39

使用Stream常常可以避免一些for循环造成的代码臃肿。在实际开发中,遇到可以用Stream处理的场景也越来越多,源码还未参透。在这只总结一些常用到的方法。

Stream的常用方法

常用方法用到的集合:

java">        List<Integer> integers = new ArrayList<>();
        integers.add(3);
        integers.add(1);
        integers.add(1);
        integers.add(2);
        integers.add(4);
        integers.add(5);

forEach()
遍历集合中的每一个元素,括号里面可以队元素进行处理。
filter()
filter用于过滤,括号里面一般使用lambda表达式设置过滤条件。

java">    //过滤掉list中大于等于4的元素,::为语法糖。System.out::println与integer-> System.out.println(integer)等价
    integers.stream().filter(integer -> integer<4).forEach(System.out::println);

distinct()
distinct用于去重。

java">    //取出list中重复的元素
    integers.stream().distinct().forEach(System.out::println);

skip()
skip用于跳过前面元素,括号里面写具体跳过元素的数字

java">    //跳过前三个元素
    integers.stream().skip(3).forEach(System.out::println);

limit()
limit用于统计前面元素,括号里面写具体统计元素的数字

java">    //取出前三个元素
    integers.stream().limit(3).forEach(System.out::println);

sorted()
sorted 方法用于排序。

java">    //对集合中的元素进行排序
    integers.stream().sorted().forEach(System.out::println);

count()
count方法用于获取集合中的元素个数

java">    //集合元素的个数
    System.out.println(integers.stream().count());

map()
map用于处理集合值,一般传入该集合,然后对该集合做处理。

java">    //将集合中的元素都变为以前的二次方
    integers.stream().map(integer -> integer*integer).forEach(System.out::println);

Stream中的collect()

collect用于集合的转化,一般放在末尾,将集合的数据处理完成之后,我们需要将处理后的数据装到什么集合中就在collect的括号里调用Collectors的方法。常用的Collectors方法有toList、toSet、toMap、groupingBy、mapping等方法。比如想要将List存储的对象中的一个或者多个字段提取出来,或者想要将一个集合中的某个属性对应的数据的集合提出出来。collect来实现,具体用法参考下面实例:

java">        ArrayList<Item> items = new ArrayList<>();
        items.add(new Item("tcc1",1));
        items.add(new Item("tcc2",2));
        items.add(new Item("tcc3",3));
        items.add(new Item("tcc4",4));
        items.add(new Item("tcc5",1));
      //取出items中name元素,并存入set集合Item::getName等价于item->item.getName()
        Set<String> groupCodes = items.stream().map(Item::getName).collect(Collectors.toSet());
        System.out.println(groupCodes);
      //取出items中name和age分别作为key和value,放入map
        Map<String, Integer> map = items.stream().collect(Collectors.toMap(Item::getName, Item::getAge));
        System.out.println(map);
        //将集合以年龄排序,返回年龄 和 年龄对应的集合的map
        Map<Integer, List<Item>> collect = items.stream().collect(Collectors.groupingBy(Item::getAge));
        System.out.println(collect);
        //将集合以年龄排序,返回年龄和 年龄中对应集合中的name集合的map
        Map<Integer, Set<String>> collect1 = items.stream().collect(
                Collectors.groupingBy(Item::getAge,
                        Collectors.mapping(Item::getName, Collectors.toSet())));
        System.out.println(collect1);

http://www.niftyadmin.cn/n/625678.html

相关文章

二叉树、平衡二叉树、红黑树、BTree、B+Tree的区别和联系

1.二叉查找树 二叉树具有以下性质&#xff1a;左子树的键值小于根的键值&#xff0c;右子树的键值大于根的键值。 如下图所示就是一棵二叉查找树&#xff0c; 对该二叉树的节点进行查找发现深度为1的节点的查找次数为1&#xff0c;深度为2的查找次数为2&#xff0c;深度为n的…

反射常用方法总结和基于反射的动态代理

1.概念 对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法。 2.主要功能&#xff1a; 在运行时判断任意一个对象所属的类&#xff1b;在运行时构造任意一个类的对象&#xff1b;在运行时判断…

java.lang.IllegalStateException: Duplicate key异常问题

前两天刚刚总结完stream流处理Java集合数据&#xff0c;今天就遇到坑了&#xff0c;在处理list数据的时候抛出异常&#xff1a; 存在有重复的key16407&#xff0c;查看日志定位到这一行代码&#xff1a; Map<String, Long> codeAndId groups.stream().collect(Collecto…

git免账号密码操作与git的常用命令

方法1&#xff1a; 进入C盘的用户目录中 C:\Users\XXX&#xff0c;创建.gitconfig文件 添加如下代码&#xff1a; [user] email 账号 name 密码 方法2&#xff1a; 进入项目的根目录&#xff0c;修改隐藏目录git里的config文件 在URL的//后&#xff0c;gitlab&#xff08;或…

MySQ中的行级锁、表级锁、悲观锁、乐观锁。

MySQL 中的 锁机制 详解 MySQL中的锁机制,按粒度分为行级锁,页级锁,表级锁. 其中按用法还分为共享锁和排他锁. 行级锁 行级锁是Mysql中锁定粒度最细的一种锁&#xff0c;表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小&#xff0c;但加…

Java的特点(面向对象、平台无关、编译解释并存、自动垃圾回收、类加载机制、丰富的类库)

1. Java是一种面向对象的语言&#xff0c;具有封装、继承、多态特性。 封装&#xff1a;保护成员属性&#xff0c;隐藏方法细节&#xff0c;不让外部类直接访问和修改而是提供GET/SET方法。继承&#xff1a;实现代码重用&#xff0c;多个类存在重复属性和方法时&#xff0c;抽…

Java中isAssignableFrom()与instanceof的区别

isAssignableFrom()&#xff1a; 用法&#xff1a;A.isAssignableFrom(B) 用于判定A类或接口是否时B类或接口的同类或者父类。 instanceof&#xff1a; 用法&#xff1a;A instanceof B 用于判定A类是否是B类的同类或者子类。 public class IsAssignableFromDemo {static c…

NIO详解以及BIO、NIO的区别

一、JavaIO流 Reader&#xff1a;字符格式操作&#xff0c;基于字符的输入操作Writer&#xff1a;字符格式操作&#xff0c;基于字符的输出操作InputStream&#xff1a;字节格式操作&#xff0c;基于字节的输入操作OutputStream&#xff1a;字节格式操作&#xff0c;基于字节的…