jdk8 Lambda,stream,juc 新特性

Java 8:Lambda、Stream与并发新特性实战
本文介绍了Java 8中Lambda表达式、Stream API和并发(JUC)的一些实用新特性,包括对象字段列表获取、构建列表、列表转Map、处理重复Key、过滤与分组信息、字符串拼接、列表运算如平方和求和,以及复杂列表操作如分组求和与合并运算等实际应用示例。

1. 获取对象字段的列表

List idcards= users.stream().map(User::getIdcard).collect(Collectors.toList());

2. 构建列表

List list = fileNames.stream().map(i ->
        {
            Enclosure enclosure = new Enclosure();
            enclosure.setName(i);
            enclosure.setUploadTime(new Timestamp(System.currentTimeMillis()));参数错误
            enclosure.setPath("testurl" + i);
            return enclosure;
        }).collect(Collectors.toList());
 

3. list转map

Map map = users.stream().collect(Collectors.toMap(User::getName, User::getAge));
Map map = users.stream().collect(Collectors.toMap(User::getName, Function.identity()));

Map resMap=map.entrySet().stream().collect(Collectors.toMap( entry1 -> entry1.getKey(),entry2 -> entry2.getValue()));

4. 转map时key重复怎么处理

Collectors.toMap(dto->key值,dto->dto,(v1,v2)->v1)
在后面添加(v1,v2)->v1 指定选取第一个值 当key值重复的时候。(根据情况而定选取第一个还是第二个)

5. 列表分组转map
Map> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId));

6. 过滤列表的信息
List list=persons.stream().filter(p->"0".equals(p.getOtherState())).collect(Collectors.toList());

7. 列表信息间隔拼接

String managerPath = managerList.stream().map(String::valueOf).collect(Collectors.joining(","));

8. 字段间隔拼接
String tempStaffNames = CollectionUtil.join(sStaffNames, ",");

9. map如何使用key,value

apiMap.forEach((k, v) -> {... ...})

10 .列表删除数据

ArrayList list =new ArrayList();
list.addAll(Arrays.asList("curry","tomphson","kerr"));
list.removeIf(str->str.equals("curry"));
System.out.println(list);

 11. 列表运算----算平方

 List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
 // 获取对应的平方数
 List squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

12. 列表运算----单层循环求和
Double totalHc = infos.stream().map(BudgetInfo::getHeadCount).reduce(0d, Double::sum);

13. 列表运算----双重循环求和
Double totalAmount= infos.stream().map(
info -> info.getDetailList().stream().map(p->p.getTotalAmount()).reduce(0Double::sum)
).reduce(0d, Double::sum);

14. 列表预算----分组求和
Map collect = resList.stream().collect(Collectors.groupingBy(Foo::getCode, Collectors.summarizingInt(Foo::getCount)));

15. 列表运算----分组合并后运算
List bussList = new ArrayList<>();
        bussList.add(new Buss("a",10,0.3));
        bussList.add(new Buss("b",3,0.8));
        bussList.add(new Buss("c",5,2.0));
        bussList.add(new Buss("b",30,3.2));
        bussList.add(new Buss("c",20,0.1));

        List st = new ArrayList<>();
        bussList.stream()
                .collect(Collectors.groupingBy(Buss::getName)) //分组(Name can't be null)
                .forEach((k,v) -> {
                    Optional sum = v.stream().reduce((v1,v2) -> {  //合并
                        v1.setCount(v1.getCount()+v2.getCount());
                        v1.setValue(v1.getValue()+v2.getValue());
                        return v1;
                    });
                    st.add(sum.orElse(new Buss("other",0,0.0)));

                });
        System.out.println(st);

或者

 BillsNums billsNums = new BillsNums();
    billsNums.setId("1001");
    billsNums.setNums(2);
    billsNums.setSums(100);
    billsNumsList.add(billsNums);
 
    BillsNums billsNums2 = new BillsNums();
    billsNums2.setId("1001");
    billsNums2.setNums(3);
    billsNums2.setSums(100);
    billsNumsList.add(billsNums2);

List result = list.stream()
        // 表示id为key, 接着如果有重复的,那么从BillsNums对象o1与o2中筛选出一个,这里选择o1,
        // 并把id重复,需要将nums和sums与o1进行合并的o2, 赋值给o1,最后返回o1
        .collect(Collectors.toMap(BillsNums::getId, a -> a, (o1,o2)-> {
            o1.setNums(o1.getNums() + o2.getNums());
            o1.setSums(o1.getSums() + o2.getSums());
            return o1;
        })).values().stream().collect(Collectors.toList());
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值