详解java8中的Stream数据流
Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关注实现结果的具体方式。这一章节中,我们将介绍为什么我们需要一种新的数据处理API、Collection和Stream的不同之处以及如何将StreamAPI应用到我们的编码中。
筛选重复的元素
Stream接口支持distinct的方法,它会返回一个元素(根据流所生成元素的hashCode和equals方法实现)的流。
例如,以下代码会筛选出列表中所有的偶数,并确保没有重复。
Listdishes=Dish.menu.stream() .filter(Dish::isVegetarian) .collect(Collectors.toList());
跳过指定数量的元素
Stream支持skip(n)方法,返回一个扔掉了前n个元素的流。如果流中元素不足n个,则返回一个空流。limit(n)和skip(n)是互补的
ListdishSkip=Dish.menu.stream().filter(d->d.getCalories()>300).skip(2)//去掉符合要求的集合中的前2个元素后返回 .collect(Collectors.toList()); dishSkip.forEach(System.out::println);
map操作
Stream支持map方法,它会接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映射成一个新的元素
Listlist=st.skip(0).limit(2).map(s->s.toUpperCase()).collect(Collectors.toList());
元素求和
Listnumbers=Arrays.asList(3,4,5,1,2); intsum1=numbers.stream().reduce(0,(a,b)->a+b); System.out.println(sum1); intsum2=numbers.stream().reduce(0,Integer::sum); System.out.println(sum2);
最大值
intmax=numbers.stream().reduce(0,Integer::max); System.out.println(max);
最小值
//reduce不接受初始值,返回一个Optional对象(考虑流中没有任何元素的情况) Optionalmin=numbers.stream().reduce(Integer::min); min.ifPresent(System.out::println);
总结
以上所述是小编给大家介绍的java8中的Stream数据流,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!