妙用java8 stream流式处理list集合

288 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

将大list切分成多个子list

public static void main(String[] args) {
List<String> list = Arrays.asList("a","d","c","w","xx","dds","ii","p","qq","l","k","g","f","d","s","v","c","m","n","z"); 
int limit = (list.size()+4)/5; 
List<List<String>> subLists = Stream.iterate(0,n ->n+1).limit(limit).parallel().map(a -> 
list.stream().skip(a*5).limit(5).parallel() .collect(Collectors.toList())).collect(Collectors.toList()); 
System.out.println(JSON.toJSONString(subLists)); }

输出结果:

[["a","d","c","w","xx"],["dds","ii","p","qq","l"],["k","g","f","d","s"],["v","c","m","n","z"]]

将两个list对象集合某字段属性相同的匹配出来成为新的list

public static void main(String[] args) {
    List<XXXModel> ModelCompareList  = new ArrayList<>();
    XXXModel XXXModel1 = new XXXModel();
    XXXModel1.setXxxId("a");

    XXXModel XXXModel2 = new XXXModel();
    XXXModel2.setXxxId("b");

    XXXModel XXXModel3 = new XXXModel();
    XXXModel3.setXxxId("c");

    XXXModel XXXModel4 = new XXXModel();
    XXXModel4.setXxxId("d");
    XXXModel XXXModel5 = new XXXModel();
    XXXModel5.setXxxId("e");
    ModelCompareList.add(XXXModel1);
    ModelCompareList.add(XXXModel2);
    ModelCompareList.add(XXXModel3);
    ModelCompareList.add(XXXModel4);
    ModelCompareList.add(XXXModel5);

    List<YYYModel>  ModelList = new ArrayList<>();
    YYYModel YYYModel1 = new YYYModel();
    YYYModel1.setXxxId("a");

    YYYModel YYYModel2 = new YYYModel();
    YYYModel2.setXxxId("b");

    YYYModel YYYModel3 = new YYYModel();
    YYYModel3.setXxxId("c");

    YYYModel YYYModel4 = new YYYModel();
    YYYModel4.setXxxId("e");
    ModelList.add(YYYModel1);
    ModelList.add(YYYModel2);
    ModelList.add(YYYModel3);
    ModelList.add(YYYModel4);

    List<XXXModel> filterResult = ModelList.stream().parallel().filter(r -> ModelCompareList.stream().anyMatch(d ->
            Objects.equals( r.getxxId(),d.getxxxId()))).collect(Collectors.toList());

    System.out.println(JSON.toJSONString(filterResult));

}

输出结果:

[{"decisionId":"a"},{"decisionId":"b"},{"decisionId":"c"},{"decisionId":"e"}]

java 8常用函数总结

list 排序

pageList.getRecords().stream().sorted(Comparator.comparing(xxxObject::getCreatedRTime).reversed()).collect(Collectors.toList());

带reversed() 就是正序(最新的排在最前)

list分组后再排序

List<Object> list = new ArrayList<>();
 List<Object> resultList = new ArrayList<>();
        list.stream().collect(Collectors.groupingBy(Object::getStatus)).forEach((k, v) -> {
            result.addAll(v.stream().sorted(Comparator.comparing(Object::getCreateTime).reversed()).collect(Collectors.toList()));
        });

按字段属性对list集合去重

 List<User> collectCost = listCost.stream().collect(Collectors.toMap(User::getAge, a -> a, (r1, r2) -> {
                    return r1;
                })).values().stream().collect(Collectors.toList());

使用java8的日期APi





LocalDate date = LocalDate.now();
LocalDate dateFromClock = LocalDate.now();

 LocalTime time = LocalTime.now();
 LocalTime timeFromClock = LocalTime.now();

System.out.println(time);

总结

java8 stream表达式,写的时候真的很爽,但是对于对着就有点不太好阅读了,尤其是代码Cr的时候,大家看到这么多的表达式,头都是大的;但是写着还很爽的。 记录在这里就是为了以后自己使用时,可以随用随取;在进行内存分页的时候真的很有用的;