集合流使用

简单的介绍一下list.stream()

这是JDK1.8的新特性,在1.8之前,或是通过便利的方式转换list集合或map集合稍有不便,从1.8开始,通过流的方式,优化了这一块的代码;

简单展示一下后面要用的对象

/**
*@Accessors(chain = true)链表模式开始
*@NoArgsConstructor 创建无参构造函数
*@AllArgsConstructor 创建全参构造函数
*lombok的几个方便的用法也在这里介绍了
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class IdValueVO implements Serializable {
    private static final long serialVersionUID = 9084800180804278720L;
    @ApiModelProperty(value="id", name="id")
    private Integer id;
    @ApiModelProperty(value="值", name="nameValue")
    private String nameValue;
    @ApiModelProperty(value="备注", name="remark")
    private Integer remark;
}

应用

@Test
    public void test4(){
        System.out.println("-------创建list集合-----------");
        List<IdValueVO> list = new ArrayList<>();
        for (int i = 0 ; i<6;i++){
            IdValueVO idValueVO = new IdValueVO();
            idValueVO.setId(i)
                    .setNameValue("test" + i)
                    .setRemark(8 - i);
            list.add(idValueVO);
        }
        /*
         * 自定义key的规则,利用流将list中id大于3的对象存入list中
         * Function.identity()  :返回一个输出跟输入一样的Lambda表达式
         * 对象,等价于形如t -> t形式的Lambda表达式。
         * (existing, replacement) -> replacement):当出现key相同的情况时,新的value覆盖掉就得value;
         */
        Map<Integer, IdValueVO> collect = list.stream().collect(Collectors.toMap(
                idValueVO -> {
                    Integer id = idValueVO.getId();
                    if (id > 3) {
                        return id;
                    }
                    return null;
                },
                Function.identity(), (existing, replacement) -> existing));

        System.out.println(collect.values().toString());
        System.out.println("------map流转list------------");
        List<IdValueVO> collect1 = collect.values().stream().collect(Collectors.toList());
        System.out.println(collect1);
        System.out.println("------创建list时存入map的value----------");
        //下面这个方法更优于上面的方法,具体我就不解释了;
        List<IdValueVO> idValueVOs = new LinkedList<>(collect.values());
        System.out.println(idValueVOs);
        System.out.println("------多插入一下数据----------");
        //多插入一下数据
        for (int i = 0 ; i<6;i++){
            IdValueVO idValueVO = new IdValueVO();
            idValueVO.setId(i)
                    .setNameValue("test" + i)
                    .setRemark(8 + i);
            idValueVOs.add(idValueVO);
        }
        System.out.println(idValueVOs);
        System.out.println("------list利用流进行排序,根据id进行排序,默认升序----------");
        List<IdValueVO> collect4 = idValueVOs.stream().sorted(Comparator.comparing
                (IdValueVO::getId)).collect(Collectors.toList());
        System.out.println(collect4);
        System.out.println("------list利用流进行排序,根据id进行排序,降序排序----------");
        //排序结果后再排序相当于排序两次
        List<IdValueVO> collect2 = idValueVOs.stream().sorted(Comparator.comparing(
                IdValueVO::getId).reversed()).collect(Collectors.toList());
        System.out.println(collect2);
        //直接进行排序
        List<IdValueVO> collect3 = idValueVOs.stream().sorted(Comparator.comparing(IdValueVO::getId
                , Comparator.reverseOrder())).collect(Collectors.toList());
        System.out.println(collect3);
        System.out.println("------list利用流进行排序,根据id进行排序,降序排序**并返回前n个元素**----------");
        List<IdValueVO> collect5 = idValueVOs.stream().sorted(Comparator.comparing(IdValueVO::getId
                , Comparator.reverseOrder())).limit(2).collect(Collectors.toList());
        System.out.println(collect5);
        System.out.println("------list利用流进行排序,根据id进行排序,降序排序**并去除前 n 个元素**----------");
        List<IdValueVO> collect6 = idValueVOs.stream().sorted(Comparator.comparing(IdValueVO::getId
                , Comparator.reverseOrder())).skip(2).collect(Collectors.toList());
        System.out.println(collect6);
        System.out.println("------先根据id进行升序排序,再降序排序,结果再对remake升序排序----------");
        List<IdValueVO> collect7 = idValueVOs.stream().sorted(Comparator.comparing(IdValueVO::getId)
                .reversed().thenComparing(IdValueVO::getRemark)).collect(Collectors.toList());
        System.out.println(collect7);
        System.out.println("------先根据id进行降序排序,结果再对remake升序排序----------");
        List<IdValueVO> collect8 = idValueVOs.stream().sorted(Comparator.comparing(IdValueVO::getId, Comparator.reverseOrder())
                .thenComparing(IdValueVO::getRemark)).collect(Collectors.toList());
        System.out.println(collect8);
        System.out.println("------先根据id进行降序排序,结果再对remake降序排序----------");
        Stream<IdValueVO> sorted = idValueVOs.stream().sorted(Comparator.comparing(IdValueVO::getId, Comparator.reverseOrder())
                .thenComparing(IdValueVO::getRemark, Comparator.reverseOrder()));
        List<IdValueVO> collect9 = sorted.collect(Collectors.toList());
        System.out.println(collect9);
    }

@Test
    public void test5(){
        PositionData positionData1 = new PositionData();
        positionData1.setId(1);
        PositionData positionData2 = new PositionData();
        positionData2.setId(1);
        PositionData positionData3 = new PositionData();
        positionData3.setId(1);
        ArrayList<PositionData> positionData = new ArrayList<PositionData>() {{
            add(positionData1);
            add(positionData2);
            add(positionData3);
        }};
        //按照id分类
        Map<Integer, List<PositionData>> collect =
                positionData.stream().collect(Collectors.groupingBy(PositionData::getId));
        System.out.println(collect.values());
    }

运行结果如下

-------创建list集合-----------
[IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=5, nameValue=test5, remark=3)]
------map流转list------------
[IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=5, nameValue=test5, remark=3)]
------创建list时存入map的value----------
[IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=5, nameValue=test5, remark=3)]
------多插入一下数据----------
[IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=5, nameValue=test5, remark=3), IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=1, nameValue=test1, remark=9), IdValueVO(id=2, nameValue=test2, remark=10), IdValueVO(id=3, nameValue=test3, remark=11), IdValueVO(id=4, nameValue=test4, remark=12), IdValueVO(id=5, nameValue=test5, remark=13)]
------list利用流进行排序,根据id进行排序,默认升序----------
[IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=1, nameValue=test1, remark=9), IdValueVO(id=2, nameValue=test2, remark=10), IdValueVO(id=3, nameValue=test3, remark=11), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=4, nameValue=test4, remark=12), IdValueVO(id=5, nameValue=test5, remark=3), IdValueVO(id=5, nameValue=test5, remark=13)]
------list利用流进行排序,根据id进行排序,降序排序----------
[IdValueVO(id=5, nameValue=test5, remark=3), IdValueVO(id=5, nameValue=test5, remark=13), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=4, nameValue=test4, remark=12), IdValueVO(id=3, nameValue=test3, remark=11), IdValueVO(id=2, nameValue=test2, remark=10), IdValueVO(id=1, nameValue=test1, remark=9), IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=0, nameValue=test0, remark=8)]
[IdValueVO(id=5, nameValue=test5, remark=3), IdValueVO(id=5, nameValue=test5, remark=13), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=4, nameValue=test4, remark=12), IdValueVO(id=3, nameValue=test3, remark=11), IdValueVO(id=2, nameValue=test2, remark=10), IdValueVO(id=1, nameValue=test1, remark=9), IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=0, nameValue=test0, remark=8)]
------list利用流进行排序,根据id进行排序,降序排序**并返回前n个元素**----------
[IdValueVO(id=5, nameValue=test5, remark=3), IdValueVO(id=5, nameValue=test5, remark=13)]
------list利用流进行排序,根据id进行排序,降序排序**并去除前 n 个元素**----------
[IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=4, nameValue=test4, remark=12), IdValueVO(id=3, nameValue=test3, remark=11), IdValueVO(id=2, nameValue=test2, remark=10), IdValueVO(id=1, nameValue=test1, remark=9), IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=0, nameValue=test0, remark=8)]
------先根据id进行升序排序,再降序排序,结果再对remake升序排序----------
[IdValueVO(id=5, nameValue=test5, remark=3), IdValueVO(id=5, nameValue=test5, remark=13), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=4, nameValue=test4, remark=12), IdValueVO(id=3, nameValue=test3, remark=11), IdValueVO(id=2, nameValue=test2, remark=10), IdValueVO(id=1, nameValue=test1, remark=9), IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=0, nameValue=test0, remark=8)]
------先根据id进行降序排序,结果再对remake升序排序----------
[IdValueVO(id=5, nameValue=test5, remark=3), IdValueVO(id=5, nameValue=test5, remark=13), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=4, nameValue=test4, remark=12), IdValueVO(id=3, nameValue=test3, remark=11), IdValueVO(id=2, nameValue=test2, remark=10), IdValueVO(id=1, nameValue=test1, remark=9), IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=0, nameValue=test0, remark=8)]
------先根据id进行降序排序,结果再对remake降序排序----------
[IdValueVO(id=5, nameValue=test5, remark=13), IdValueVO(id=5, nameValue=test5, remark=3), IdValueVO(id=4, nameValue=test4, remark=12), IdValueVO(id=4, nameValue=test4, remark=4), IdValueVO(id=3, nameValue=test3, remark=11), IdValueVO(id=2, nameValue=test2, remark=10), IdValueVO(id=1, nameValue=test1, remark=9), IdValueVO(id=0, nameValue=test0, remark=8), IdValueVO(id=0, nameValue=test0, remark=8)]
Disconnected from the target VM, address: '127.0.0.1:58272', transport: 'socket'

Process finished with exit code 0


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值