jdk8 Lambda,stream,juc 新特性

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());
 


版权声明:本文为jim_007原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。