Java中List常用stream()之拿来就用

直接上代码,测试

package com.example.demo.Enum;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import java.util.*;
import java.util.stream.Collectors;

@Data
public class BeanName {
    private Integer id;
    private String name;
    private Boolean sex;

    public BeanName(int id, String name, boolean sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }
    public static void main(String[] args) {
        BeanName beanName1 = new BeanName(1, "A", true);
        BeanName beanName2 = new BeanName(2, "B", true);
        BeanName beanName3 = new BeanName(3, "C", false);
        BeanName beanName4 = new BeanName(3, "D", false);
        List<BeanName> list = new ArrayList<>();
        list.add(beanName1);list.add(beanName2);list.add(beanName3);list.add(beanName4);
        System.out.println("原来的值:" + JSON.toJSONString(list));
        // list.stream().map().collect() 方法,可以获取list中JavaBean的某个字段,转成一个新的list。
        List<Integer> integerList = list.stream().map(e -> e.getId()).collect(Collectors.toList());
        System.out.println("根据JavaBean的某个字段,转成新的list(未去重):" + JSON.toJSONString(integerList));
        List<Integer> integerListD = list.stream().map(e -> e.getId()).distinct().collect(Collectors.toList());
        System.out.println("根据JavaBean的某个字段,转成新的list(去重):" + JSON.toJSONString(integerListD));
        Set<Integer> integerSet = list.stream().map(e -> e.getId()).collect(Collectors.toSet());
        System.out.println("根据JavaBean的某个字段,转成新的Set(去重):" + JSON.toJSONString(integerSet));
        List<Integer> sortedNumbers = list.stream().map(e -> e.getId()).distinct().sorted().collect(Collectors.toList());
        System.out.println("根据JavaBean的某个字段,升序排序:" + JSON.toJSONString(sortedNumbers));
        List<Integer> reversedNumbers = list.stream().map(e -> e.getId()).distinct()
                .sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        System.out.println("根据JavaBean的某个字段,降序排序:" + JSON.toJSONString(reversedNumbers));
        List<BeanName> sortedList = list.stream().sorted(Comparator.comparing(BeanName::getId)).collect(Collectors.toList());
        System.out.println("根据JavaBean的某个字段,进行升序:" + JSON.toJSONString(sortedList));
        List<BeanName> reversedList = list.stream().sorted(Comparator.comparing(BeanName::getId)
                                        .reversed()).collect(Collectors.toList());
        System.out.println("根据JavaBean的某个字段,进行降序序:" + JSON.toJSONString(reversedList));
        // list.stream().filter()可以对list中的JavaBean进行筛选,保留符合条件的 JavaBean
        List<String> filterList = list.stream().filter(e->e.getSex()).map(BeanName::getName).collect(Collectors.toList());
        System.out.println("根据JavaBean的sex为true,转成新的list(未去重):" + JSON.toJSONString(filterList));
        Map<Integer,BeanName> filterMap = list.stream().filter(e -> e.getSex()).collect(Collectors
                                            .toMap(BeanName::getId,v->v,(k1,k2)->k1));
        System.out.println("根据JavaBean的sex为true,转成新的Map(去重):" + JSON.toJSONString(filterMap));
        // list.stream().collect() 方法,可以把list转为map,(k1, k2) -> k1) 如果有重复就取第一个
        Map<Integer,String> idMap = list.stream().collect(Collectors.toMap(BeanName::getId, v->v.getName(),(k1, k2) -> k1));
        System.out.println("将List转成Map,以Id作为key,Name作为value:" + JSON.toJSONString(idMap));
        Map<Integer,BeanName> listMap = list.stream().collect(Collectors.toMap(BeanName::getId, v->v,(k1, k2) -> k1));
        System.out.println("将List转成Map,以Id作为key,javaBean作为value:" + JSON.toJSONString(listMap));
        Map<Integer,List<BeanName>> groupMap = list.stream().collect(Collectors.groupingBy(BeanName::getId));
        System.out.println("将List转成Map,以Id作为key,List作为value:" + JSON.toJSONString(groupMap));
        Map<Integer, Map<String, List<BeanName>>> groupsMap = list.stream().collect(Collectors.groupingBy(BeanName::getId,
                                                                Collectors.groupingBy(BeanName::getName)));
        System.out.println("将List转成Map,以Id作为key,Map作为value:" + JSON.toJSONString(groupsMap));
        long count = list.stream().count();
        System.out.println("将List元素数量:" + count);
    }
}

运行结果

原来的值:[{"id":1,"name":"A","sex":true},{"id":2,"name":"B","sex":true},{"id":3,"name":"C","sex":false},{"id":3,"name":"D","sex":false}]
根据JavaBean的某个字段,转成新的list(未去重):[1,2,3,3]
根据JavaBean的某个字段,转成新的list(去重):[1,2,3]
根据JavaBean的某个字段,转成新的Set(去重):[1,2,3]
根据JavaBean的某个字段,升序排序:[1,2,3]
根据JavaBean的某个字段,降序排序:[3,2,1]
根据JavaBean的某个字段,进行升序:[{"id":1,"name":"A","sex":true},{"id":2,"name":"B","sex":true},{"id":3,"name":"C","sex":false},{"id":3,"name":"D","sex":false}]
根据JavaBean的某个字段,进行降序序:[{"id":3,"name":"C","sex":false},{"id":3,"name":"D","sex":false},{"id":2,"name":"B","sex":true},{"id":1,"name":"A","sex":true}]
根据JavaBean的sex为true,转成新的list(未去重):["A","B"]
根据JavaBean的sex为true,转成新的Map(去重):{1:{"id":1,"name":"A","sex":true},2:{"id":2,"name":"B","sex":true}}
将List转成Map,以Id作为key,Name作为value:{1:"A",2:"B",3:"C"}
将List转成Map,以Id作为key,javaBean作为value:{1:{"id":1,"name":"A","sex":true},2:{"id":2,"name":"B","sex":true},3:{"id":3,"name":"C","sex":false}}
将List转成Map,以Id作为key,List作为value:{1:[{"id":1,"name":"A","sex":true}],2:[{"id":2,"name":"B","sex":true}],3:[{"id":3,"name":"C","sex":false},{"id":3,"name":"D","sex":false}]}
将List转成Map,以Id作为key,Map作为value:{1:{"A":[{"id":1,"name":"A","sex":true}]},2:{"B":[{"id":2,"name":"B","sex":true}]},3:{"C":[{"id":3,"name":"C","sex":false}],"D":[{"id":3,"name":"D","sex":false}]}}
将List元素数量:4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值