java8Stream 介绍

java8Stream 介绍

在java8 之前我们想要过滤一个列表里面的数据怎么做了?
没错,就是这样。也是十分的简单。就是用一个循环遍历,筛选然后在返回。

 /**
     * 在java8之前过滤一个list需要怎么做
     * @param <T>
     * @param list
     */
    private static <T> List<T> beforeJava8FilterList(List<T> list,T filterEle) {
        List<T> result = new ArrayList<>();
        for (T t : list) {
            if(filterEle.equals(t)) continue;
            result.add(t);
        }
        return result;
    }    

但是到了java8 我们可以这样
The equivalent example in Java 8, stream.filter() to filter a List, and collect() to convert a stream into a List.
利用 stream.filter()来过滤一个list,再利用collect()来将一个stream 转换位一个集合。
于是我们的代码可以这样写!!!!

 /**
     * 在java8 我们是如何过滤一个list
     * @param <T>
     * @param list
     * @param filterEle
     * @return
     */
    private static <T> List<T> inJava8FilterList(List<T> list,T filterEle) {
        return list.stream().filter(x->!filterEle.equals(x)).collect(Collectors.toList());
    }    

接下来我们好好学习一下stream的filter(), findAny() and orElse()

准备类:


在java8之前想通过name 找出list中的一个对像时我怎么做?

private static Person findPersonByNameBeforeJava8(List<Person> list,String targetName) {
        for (Person person : list) {    
            if(targetName.equals(person.getName()))
                return person;
        }
        return null;
    }

没错就是利用循环遍历匹配。
当到了java8我们可以这样做

Person result1 = persons.stream()                        // Convert to steam
                .filter(x -> "jack".equals(x.getName()))        // we want "jack" only
                .findAny()                                      // If 'findAny' then return found
                .orElse(null);                                  // If not found, return null

想法是:通过stream.fllter(将我们的目标对象拦截出来),通过findAny方法进行判断如果找出来就返回,如果没有找到就利用.orElse(null)返会一个null出来。
当然filter也支持多条件的加持。eg

 .filter((p) -> "jack".equals(p.getName()) && 20 == p.getAge())

or

.filter(p -> {
                    if ("jack".equals(p.getName()) && 20 == p.getAge()) {
                        return true;
                    }
                    return false;
                })

Streams filter() and map()

 String name = persons.stream()
                .filter(x -> "jack".equals(x.getName()))
                .map(Person::getName)                        //convert stream to String
                .findAny()
                .orElse("");

        System.out.println("name : " + name);

        List<String> collect = persons.stream()
                .map(Person::getName)
                .collect(Collectors.toList());

        collect.forEach(System.out::println);

output

name : jack

mkyong
jack
lawrence

map做的工作更像是对其进行了类型转换。关于map()跟多的用法我将在下一篇文章进行介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值