欢迎访问本站,祝大家玩得愉快。

Java8中的List Stream的findAny和findFirst,以及

Java kany.wang 1846℃ 0评论

Java8 学习记录

主要是为了记录stream的filter的方法,然后顺便学习了下findAny、findFirst的这些方法。
只是为了记录方便自己进行查询2019年6月12日 16:04:00

代码实现

    @Test
    public void getCookie() {
        List<Cookie> cookies = new ArrayList<>();
        Cookie sessionCookie = new BasicClientCookie("jsessionid", "https://kany.me");
        cookies.add(sessionCookie);
        Cookie sessionSameCookie = new BasicClientCookie("jsessionid", "https://www.kany.me");
        cookies.add(sessionSameCookie);
        Cookie otherCookie = new BasicClientCookie("other", "http://www.kany.me");
        cookies.add(otherCookie);

        /**
         * 如果是其他方法获取的集合对象,建议还是判断先是否为空的好
         */
        if (null != cookies && cookies.size() > 0) {
            List<Cookie> targetCookies = cookies.stream().filter(e -> "jsessionid".equalsIgnoreCase(e.getName())).collect(Collectors.toList());
            if (null != targetCookies && targetCookies.size() > 0) {
                logger.debug("Cookie名称为:{}的值为:{}", "jsessionid", targetCookies.get(0).getValue());
            }

            Optional<Cookie> optionalFindFirstCookie = cookies.stream().filter(e -> "jsessionid".equalsIgnoreCase(e.getName())).findFirst();
            if (optionalFindFirstCookie.isPresent()) {
                logger.debug("Cookie名称为:{}的值为:{}", "jsessionid", optionalFindFirstCookie.get().getValue());
            }

            /**
             * findAny并不是随机地选一个,如果是数据较少,串行地情况下,一般会返回第一个结果,如果是并行的情况,那就不能确保是第一个。
             */
            Optional<Cookie> optionalFindAnyCookie = cookies.stream().filter(e -> "jsessionid".equalsIgnoreCase(e.getName())).findAny();
            if (optionalFindAnyCookie.isPresent()) {
                logger.debug("Cookie名称为:{}的值为:{}", "jsessionid", optionalFindAnyCookie.get().getValue());
            }

            /**
             * 这么我们使用find之后的orElse,也就是说没有找到的情况下返回的默认对象是什么
             */
            Cookie tragetCookie = cookies.stream().filter(e -> "jsessionid".equalsIgnoreCase(e.getName())).findFirst().orElse(setDefault("orElse"));
            if (null != tragetCookie) {
                logger.debug("Cookie名称为:{}的值为:{}", "jsessionid", tragetCookie.getValue());
            }

            /**
             * 当Optonal的值是空值时,无论orElse还是orElseGet都会执行;而当返回的Optional有值时,orElse会执行,而orElseGet不会执行。
             */
            tragetCookie = cookies.stream().filter(e -> "jsessionid".equalsIgnoreCase(e.getName())).findFirst().orElseGet(() -> setDefault("orElseGet"));
            if (null != tragetCookie) {
                logger.debug("Cookie名称为:{}的值为:{}", "jsessionid", tragetCookie.getValue());
            }
        }
    }

    /**
     * setDefault: 默认设置为空的方法,用来检查在值不为空时orElse是否依然被执行<br/>
     *
     * @param name
     * @return
     * @author kany.me
     * @createTime 2019/6/12 15:56
     */
    public Cookie setDefault(String name) {
        logger.debug("{}我被执行了", name);
        return null;
    }

参考链接

联系方式

  • 小伙伴群:J2EE技术交流

打赏

转载请注明:懒人屋 » Java8中的List Stream的findAny和findFirst,以及

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址