Java中的集合工具类Collections以及Stream流聚合操作

283 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情

Java中的集合工具类Collections以及Stream流聚合操作

需要:

       (1)掌握Properties集合的特点及相关方法的用法。

       (2)掌握集合工具类Collections的特点及相关方法的用法。

       (3)掌握Stream流类的聚合操作。

Properties集合读写文件的相关方法:

这里的集合必须是Properties集合:

       public void load(Reader reader):把文件中的数据读取到集合中

       public void store(Writer writer,String comments):把集合中的数据存储到文件

编写程序实现以下功能:有一个文本文件(xzbz.txt),我知道数据是键值对形式的,但是不知道内容是什么。请写一个程序判断是否有“lisi”这样的键存在,如果有就改变其值为”100”。

xzbz.txt文件内容可能如下:

       zhangsan=30

       lisi=40

       wangwu=50

分析:

       A:把文件中的数据加载到集合中

       B:遍历集合,获取得到每一个键

       C:判断键是否有为"lisi"的,如果有就修改其值为"100"

       D:把集合中的数据重新存储到文件中

    Properties prop=new Properties();
    Reader r=new FileReader("xzbz.txt");
    prop.load(r);
    r.close();
    Set<String> set = prop.stringPropertyNames();
    for (String key : set) {
        if(key.equals("lisi")){
            prop.setProperty(key, "100");
        }
    }
    Writer w=new FileWriter("xzbz.txt");
    prop.store(w, null);
    w.close();

Collections集合工具类的相关方法及功能:

       Collections:是针对集合进行操作的工具类,都是静态方法。

面试题:Collection和Collections的区别?

       Collection:是单列集合的顶层接口,有子接口List和Set。

       Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法

要知道的方法:

       public static <T> void sort(List<T> list):排序 默认情况下是自然顺序。

       public static <T> int binarySearch(List<?> list,T key):二分查找

       public static <T> T max(Collection<?> coll):最大值

       public static void reverse(List<?> list):反转

       public static void shuffle(List<?> list):随机置换

Collections集合工具类对自定义类元素的排序:

       Collections可以针对ArrayList存储基本包装类的元素排序,注意:如果同时有自然排序和比较器排序,以比较器排序为主。

聚合操作的基本用法:

过滤出集合中姓“林”的名单并截取前2个人,最终输出过滤和截取后的集合。

       1.创建一个List集合对象

       2.创建一个Stream流对象

       3.对Stream流中的元素分别进行过滤、截取操作

       4.对Stream流中的元素进行终结操作,进行遍历输出

    List<String> list = new ArrayList<String>();
    list.add("林青霞");
    list.add("王祖贤");
    list.add("林凤娇");
    list.add("林志颖");
    list.add("林志玲");
    Stream<String> stream = list.stream();
    Stream<String> stream2 = stream.filter(i -> i.startsWith("林"));
    Stream<String> stream3 = stream2.limit(2);
    stream3.forEach(j -> System.out.println(j));

跳过+截取功能:

       stream.skip(1)  // 跳过流中的前1个元素

       stream.limit(2) // 截取流中的前2个元素