java8新特性_Stream用法

Stream

package mms.shop.app.api.order;

import lombok.Data;

import java.util.*;
import java.util.stream.Collectors;

public class test {
    @Data
    public static class stutest {
        String name;
        char sex;
        int eag;

        public stutest(String name, char sex, int eag) {
            this.name = name;
            this.sex = sex;
            this.eag = eag;
        }
    }

    public static void main(String[] args) {
        List<stutest> list = new ArrayList<>();
        list.add(new stutest("name1", '男', 1));
        list.add(new stutest("name2", '女', 2));
        list.add(new stutest("name3", '女', 3));
        list.add(new stutest("name4", '男', 1));
        list.add(new stutest("name5", '女', 3));
        list.add(new stutest("name6", '女', 1));
        list.add(new stutest("name7", '男', 2));
        list.add(new stutest("name8", '女', 1));
        list.add(new stutest("name9", '女', 5));
        list.add(new stutest("name10", '男', 9));

        //筛选   输出结果 :name1  name2 name4   name5  name6    name7   name8      name9  name10
        List<stutest> filtered = list.stream().filter(itme -> !itme.getName().equals("name3")).collect(Collectors.toList());
        filtered.forEach(str -> System.out.println(str.getName()));


        //年龄加2
        filtered.forEach(str -> str.setEag(str.getEag() + 2));
        //输出姓名 对应年龄   结果:
        //name1-3
        //name2-4
        //name4-3
        //name5-5
        //name6-3
        //name7-4
        //name8-3
        //name9-7
        //name10-11
        filtered.forEach(str -> System.out.println(str.getName() + "-" + str.getEag()));


        //map 方法用于映射每个元素到对应的结果 也就是说得到一个新的结果    i 相当于是 list 中的一个itme
        //结果:
        //我叫:name1
        //我叫:name2
        //我叫:name3
        //我叫:name4
        //我叫:name5
        //我叫:name6
        //我叫:name7
        //我叫:name8
        //我叫:name9
        //我叫:name10
        List<String> squaresList = list.stream().map(i -> "我叫:" + i.getName()).distinct().collect(Collectors.toList());
        squaresList.forEach(itme -> System.out.println(itme));


        //Collectors.mapping 与上方法作用一样
        // 区别  上方法可以 对 i.getName() 进行变更 例如 i.getName()+"1" 之类的拼接或者其他变更
        //结果:
        //name1
        //name2
        //name3
        //name4
        //name5
        //name6
        //name7
        //name8
        //name9
        //name10
        List<String> list1 = list.stream().collect(Collectors.mapping(stutest::getName, Collectors.toList()));
        list1.forEach(itme -> System.out.println(itme));

        List<Integer> eag = list.stream().collect(Collectors.mapping(stutest::getEag, Collectors.toList()));
        System.out.println("列表中最大的数 : " + eag.stream().mapToInt((x) -> x).summaryStatistics().getMax());
        //列表中最大的数 : 11
        System.out.println("列表中最小的数 : " + eag.stream().mapToInt((x) -> x).summaryStatistics().getMin());
        //列表中最小的数 : 3
        System.out.println("所有数之和 : " + eag.stream().mapToInt((x) -> x).summaryStatistics().getSum());
        //所有数之和 : 46
        System.out.println("平均数 : " + eag.stream().mapToInt((x) -> x).summaryStatistics().getAverage());
        //平均数 : 4.6

        //直接连接
        //结果 :
        //name1name2name3name4name5name6name7name8name9name10
        String join1 = list.stream().map(stutest::getName).collect(Collectors.joining());
        System.out.println("join1====================" + join1);


        //逗号连接
        //结果 :
        //name1, name2, name3, name4, name5, name6, name7, name8, name9, name10
        String join2 = list.stream().map(stutest::getName).collect(Collectors.joining(", "));
        System.out.println("join2====================" + join2);


        //计算list 中名字不等于name3 的数量
        //结果
        //9
        long count1 = list.stream().filter(itme -> !itme.getName().equals("name3")).collect(Collectors.toList()).size();
        System.out.println("count1====================" + count1);


        //同 .count()  .count() 作用于流
        //结果
        //9
        long count = list.parallelStream().filter(string -> !string.getName().equals("name3")).count();
        System.out.println("count====================" + count);


        //list转map
        //结果
        //{name6=3, name5=5, name4=3, name3=3, name10=11, name9=7, name8=3, name7=4, name2=4, name1=3}
        Map<String, Integer> map = list.stream().collect(Collectors.toMap(stutest::getName, stutest::getEag));
        System.out.println(map);


        //key值相同时 用后面的value 替换前面的value
        //结果
        //{3=name8, 4=name7, 5=name5, 7=name9, 11=name10}
        Map<Integer, String> map1 = list.stream().collect(Collectors.toMap(stutest::getEag, stutest::getName, (key1, key2) -> key2));
        System.out.println(map1);


        //按年龄分组  key 为分组   value 为分组后的值  值为 分组后属于key 这一组的 对象的 姓名
        //结果
        //prodMap======={3=[name1, name3, name4, name6, name8], 4=[name2, name7], 5=[name5], 7=[name9], 11=[name10]}
        Map<Integer, List<String>> prodMap = list.stream().collect(Collectors.groupingBy(stutest::getEag, Collectors.mapping(stutest::getName, Collectors.toList()))); //counting()    , Collectors.mapping(stutest::getName, Collectors.toList()))
        System.out.println("prodMap=======" + prodMap);


    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值