Java8的Stream流的使用

5 篇文章 0 订阅

参考自 原作者

//过滤出蔬菜食物
List<Food> vegetablesFood= menu.stream().filter(Food::isVegetable).collect(Collectors.toList());

 

//过滤出偶数,并且不重复的元素。
List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
numbers.stream().filter(i->i%2==0).distinct().forEach(System.out::println);

 

//截断流  热量大于300卡路里的食物        解析?
List<Food> foodList = allFoodList.stream().filter(f->f.getCalories()>300).limit(3).collect(toList());
//跳过元素  热量大于300卡路里的食物     解析?
List<Food>foodList = allFoodList.stream().filter(f->f.getCalories()>300).skip(2).collect(toList());
//映射            为啥不是f.getName()呢?
List<String> foodNameList = allFoodList.stream().map(Food::getName).collet(toList());

List<String> foodNameList = Arrays.asList("apple","pear","balana","tomato","onion");
List<Integer>wordLengthList = foodNameList.stream().map(String::length).collect(toList);
//展开流
String words = "Hello world"
List<String> uniqueCharacters = words.stream().map(w->w.split("")).flatMap(Arrays::stream).distinct().collet(Collectors.toList());

 

/*
 *查找和匹配
 *
 */
//任意匹配    判断的条件里,任意一个元素匹配成功,返回true
if(allFoodList.stream().anyMatch(Food::isVegetable)){
    System.out.println("The food is so good!");
}
//全部匹配       判断条件里的元素,所有的都是XXX时候,返回true
Boolean isHealthy = allFoodList.stream().allMatch(f->f.getCalories<1000);
//全部不匹配    判断条件里的元素,所有的都不是XXX时候,返回true
Boolean isHealthy = allFoodList.stream().noneMatch(f->f.getCalories<1000);
//获取任意一个元素  
Optional<Food> food = allFoodList.stream().filter(Food::isVegetable).findAny();


 

/*
 *归约   将一个流中的元素,反复结合运算得到一个值
 */
//使用循环求和
List<Integer> numbers = new ArrayList<Integer>();
int sum = 0;
for(int x:numbers){
    sum+=x;
}

//使用流的API求和
int sum2 = numbers.stream().reduce(0,(a,b)->a+b);

 

 

//求最大值
Optional<Integer> max = numbers.stream().reduce(Integer::max);

//求最小值
Optional<Integer> min = numbers.stream().reduce(Integer::min);

//使用reduce相对于使用逐步迭代的好处在于,外部迭代改成了内部迭代,在需要实现并行执行的操时作变得简单。

 

 

JAVA8的排序实现:
receivedProducts.sort(Comparator.comparing(rp->rp.getPlant().getOrgName()));
persions.sort(Comparator.comparing(Persion::getAge).reversed());
persions.sort((t1,t2)->{
            if(t1.getAge() > t2.getAge()){
                return -1;
            }
            return 1;
        });

 

注:使用toMap()函数之后,返回的就是一个Map了,自然会需要key和value。
toMap()的第一个参数就是用来生成key值的,第二个参数就是用来生成value值的。
第三个参数用在key值冲突的情况下:如果新元素产生的key在Map中已经出现过了,第三个参数就会定义解决的办法。

假如:   .collect(Collectors.toMap(UserBo::getUserId, v -> v, (v1, v2) -> v1));
第一个参数UserBo::getUserId 表示选择UserBo的getUserId作为map的key值;
第二个参数v -> v表示选择将原来的对象作为map的value值;
第三个参数(v1, v2) -> v1中,如果v1与v2的key值相同,选择v1作为那个key所对应的value值

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值