前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java进阶|java8Stream数据处理全面总结

java进阶|java8Stream数据处理全面总结

作者头像
码农王同学
发布2020-04-12 20:16:54
5790
发布2020-04-12 20:16:54
举报
文章被收录于专栏:后端Coder

java8提供了对集合数据进行处理一系列数据的方法,今天就全面解析一下其用法,也是自己对其的一个总结性文章的结束了,后面就不再写这样的文章了。

关于Stream的用法,记住原点,中间操作,终端操作这三个知识点就可以了。

整个代码的示例程序已经包含了整个用法的详细解释,这里就不一一用文字进行描述了。

代码语言:javascript
复制
package com.wpw.springbootjuc.java8;
import lombok.extern.slf4j.Slf4j;
import java.util.*;import java.util.function.Function;import java.util.stream.Collectors;import java.util.stream.Stream;
/** * 使用最新的Stream流数据api进行数据处理 * * @author wpw */@Slf4jpublic class CollectionTest {    private static final List<Person> personList = new ArrayList<>();
    static {        personList.add(Person.builder().build().setId(1L).setName("张三").setAge(15).setAddress("浙江"));        personList.add(Person.builder().build().setId(2L).setName("李四").setAge(15).setAddress("河南"));        personList.add(Person.builder().build().setId(3L).setName("王五").setAge(16).setAddress("北京"));        personList.add(Person.builder().build().setId(4L).setName("赵六").setAge(16).setAddress("上海"));        personList.add(Person.builder().build().setId(5L).setName("孙七").setAge(17).setAddress("浙江"));    }
    /**     * 数据过滤的测试     */    private static List<Person> DataFilter(List<Person> personList) {        /**         * 这里我们过滤年龄是15&地址是浙江的数据         */        return personList.stream().filter(x -> x.getAge() == 15 && x.getAddress().equals("浙江")).collect(Collectors.toList());    }
    /***     * 数据的输出print     */    public static void acceptDataAndPrint(List<Person> personList) {        personList.forEach(x -> System.out.println("x = " + x));    }
    /**     * 数据的转换或者可以说是处理map     *     * @return     */    public static List<Integer> mapHandler(List<Person> personList) {        /***         * 只获取年纪这个字段的数据,进行数据的收集         * 其它字段的数据收集类推         */        return personList.stream().map(Person::getAge).collect(Collectors.toList());    }
    /**     * 数据集合的去重distinct     *     * @return     */    public static List<String> distinctHandler(List<Person> personList) {        /**         * 处理数据集合地址重复的数据,然后进行收集         */        return personList.stream().map(Person::getAddress).distinct().collect(Collectors.toList());    }
    /**     * 数据集合的自然排序     *     * @return     */    public static List<Person> sortHandler(List<Person> personList) {        return personList.stream().sorted().collect(Collectors.toList());    }
    /***     *数据集合的自定义排序     * @return     */    public static List<Person> sortHandlerWithComparator(List<Person> personList) {        /**         * 按照年级进行排序,你可以根据自己的需求进行排序         */        return personList.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());    }
    /**     * 数据集合的limit,想到mysql这样的db用法了     *     * @return     */    public static List<Person> limitHandler(List<Person> personList) {        /**         * 只会过滤出前两条数据         */        return personList.stream().limit(2).collect(Collectors.toList());    }
    /**     * 数据集合skip方法的使用     *     * @return     */    public static List<Person> skipHandler(List<Person> personList) {        /**         * 跳过前两个数据,然后进行数据的收集         */        return personList.stream().skip(2).collect(Collectors.toList());    }
    /**     * 数据的收集聚合操作reduce     *     * @return     */    public static String reduceHandler(List<Person> personList) {        return personList.stream().map(Person::getAddress).reduce("地址集合", (x, y) -> x + y);    }
    /**     * 返回数据集合中年纪最大的数据max     *     * @return     */    public static Person maxHandler(List<Person> personList) {        return personList.stream().max(Comparator.comparing(Person::getAge)).orElse(null);    }
    /**     * 返回数据集合中年纪最小的数据min     *     * @return     */    public static Person minHandler(List<Person> personList) {        return personList.stream().min(Comparator.comparing(Person::getAge)).orElse(null);    }
    /**     * 判断数据集合是否全部满足某一规则     *     * @return     */    public static boolean allMatchHandler(List<Person> personList) {        return personList.stream().map(Person::getAddress).allMatch("浙江"::equals);    }
    /**     * 判断数据集合是否任意满足某一规则     *     * @return true/false     */    public static boolean anyMatchHandler(List<Person> personList) {        return personList.stream().map(Person::getAddress).anyMatch("浙江"::equals);    }
    /**     * 判断数据集合是否全部不满足某一规则     *     * @return true/false     */    public static boolean noneMatchHandler(List<Person> personList) {        return personList.stream().map(Person::getAddress).noneMatch("郑州"::equals);    }
    /**     * 统计数据集合的数据count     *     * @return count汇总数据的个数     */    public static long countHandler(List<Person> personList) {        return personList.stream().count();    }
    /**     * 处理数据集合中,满足执行条件的第一个数据findFirst     *     * @return     */    public static Person findFirstHandler(List<Person> personList) {        return personList.stream().filter(x -> x.getAddress().equals("浙江")).findFirst().orElse(null);    }
    /**     * 数据转集合,集合转数据的介绍toArray     *     * @return     */    public static Object[] toArrayHandler(List<Person> personList) {        return personList.stream().map(Person::getAddress).toArray();    }
    /**     * 数据集合转为map     *     * @return     */    public static Map<Object, Object> listToMapHandler(List<Person> personList) {        /**         * 按照地址进行map的转换         */        return personList.stream().collect(Collectors.toMap(Function.identity(), Person::getAddress));    }
    /**     * 处理map的数据信息     */    public static void mapDataHandler(Map<Object, Object> map) {        map.forEach((key, value) -> {            System.out.println(String.format("键%s--值:%s", key, value));        });    }
    /**     * map转集合数据     *     * @return     */    public static List<Object> mapToListHandler(Map<Object, Object> map) {        return map.values().stream().collect(Collectors.toList());    }
    /**     * 数据集合转换流     *     * @return     */    public static Stream<Object> listToStreamHandler(List<Person> personList) {        return Stream.of(personList.toArray());    }
    public static void main(String[] args) {        log.debug("数据集合的filter操作");        acceptDataAndPrint(DataFilter(personList));        log.debug("数据集合的map操作");        List<Integer> integerList = mapHandler(personList);        integerList.stream().forEachOrdered(x -> System.out.print(x + "\t"));        log.debug("数据集合的去重操作");        List<String> stringList = distinctHandler(personList);        stringList.forEach(x -> System.out.print(x + "\t"));        log.debug("数据集合的自然排序操作");        acceptDataAndPrint(sortHandler(personList));        log.debug("数据集合的自定义排序");        acceptDataAndPrint(sortHandlerWithComparator(personList));        log.debug("数据集合的limit限制数据的返回");        acceptDataAndPrint(limitHandler(personList));        log.debug("数据集合的skip跳过指定数据的处理");        acceptDataAndPrint(skipHandler(personList));        log.debug("数据集合的聚合操作");        String handler = reduceHandler(personList);        System.out.println("handler = " + handler);        log.debug("返回数据的最大值数据");        Person person = maxHandler(personList);        System.out.println("person = " + person);        log.debug("返回数据的最小值数据");        Person p = minHandler(personList);        System.out.println("p = " + p);        log.debug("数据直接的allMatch操作");        boolean matchHandler = allMatchHandler(personList);        System.out.println("matchHandler = " + matchHandler);        log.debug("数据直接的anyMatch操作");        boolean anyMatchHandler = anyMatchHandler(personList);        System.out.println("anyMatchHandler = " + anyMatchHandler);        log.debug("数据直接的noneMatch操作");        boolean noneMatchHandler = noneMatchHandler(personList);        System.out.println("noneMatchHandler = " + noneMatchHandler);        log.debug("数据集合的统计操作");        long count = countHandler(personList);        System.out.println("count = " + count);        log.debug("数据集合的findFirst操作");        Person firstHandler = findFirstHandler(personList);        System.out.println("firstHandler = " + firstHandler);        log.debug("数据集合转为数组的操作");        Object[] objects = toArrayHandler(personList);        Arrays.stream(objects).forEachOrdered(System.out::println);        log.debug("数据集合转为map操作");        Map<Object, Object> map = listToMapHandler(personList);        mapDataHandler(map);        Map<String,String>  hashMap = new HashMap<>(16,0.75f);        hashMap.put("key","value");        hashMap.put("key2","value2");        hashMap.put("key3","value3");        log.debug("map转为集合的操作");        List<Object> objectList = mapToListHandler(map);        objectList.stream().forEach(System.out::println);        log.debug("转为数据流Stream的操作");        Stream<Object> stream = listToStreamHandler(personList);        List<Object> collect = stream.collect(Collectors.toList());        collect.forEach(System.out::println);    }}

关于集合的Stream操作就到这里结束了,还是喜欢那简单而有用的示例程序,java基础性的文章终于告一段落了。文中的实体类person主要包含id,name,age,address字段用于测试,自己在用时新建一个就可以了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档