【开发】stream流api

基础api

//1.1集合根据某一个属性进行去重
 ArrayList<Person> ll = collect.stream().collect(
 Collectors.collectingAndThen(Collectors.toCollection(() ->
        new TreeSet<>(Comparator.comparing(Person::getAge))), ArrayList::new));
		//集合根据多个属性进行去重
list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
		new TreeSet<>(Comparator.comparing(o -> o.getSkuId() + ";" + o.getCode()))), ArrayList::new));

//2.集合根据某一对象**属性进行过滤**
List<Person> collect = Stream.of(new Person("张三", 10), new Person("李四", 12)).filter(
       person -> person.getName().equals("张三")).collect(Collectors.toList());

//3.**map对象映射**
List<String> collect1 = Stream.of(new Person("张三", 10), new Person("李四", 12))
   	  .map(Person::getName).collect(Collectors.toList());
   	  //map遍历,如果参数和返回值一样可用peek代替
List<Person> collect1 = Stream.of(new Person("张三", 10), new Person("李四", 12))
   	  .map(data->{data.setName(""); return data}).collect(Collectors.toList());

//4.将list集合按某一属性进行**分组**
Map<String, List<Person>> collect2 = 
	Stream.of(new Person("张三", 10), new Person("李四", 12),new Person("李四", 31))
         .collect(Collectors.groupingBy(Person::getName));
  	//两层分组
    Map<String, Map<String, List<Person>>> areaGroup = 
personList.stream().collect(Collectors.groupingBy(Person::getSex,Collectors.groupingBy(Person::getArea)));
//5.将list集合针对**某一属性进行排序**
List<Person> collect3 = Stream.of(new Person("张三", 10), new Person("李四", 12))
     .sorted(Comparator.comparing(Person::getAge).reversed()).collect(Collectors.toList());
	//对数字进行排序
List<Integer> collect4 = Stream.of(1, 2, 5, 3)
				.sorted(Comparator.comparing(Integer::new)).collect(Collectors.toList());

//6.获取集合第一个或任意一个
Optional<Integer> findFirst = list.stream().filter(num  -> num  > 51).findFirst();//findAny
		boolean empty = findFirst.isEmpty();
		boolean isPresent= findFirst.isPresent();
		//判断是否包含
 		boolean anyMatch = list.stream().anyMatch(num -> num > 6);
 
//7.Option判空写法
JdCompanyBu jdCompanyBu = Optional.ofNullable(jdCompanyBuPageDTO.getJdCompanyBu())
          .orElse(new JdCompanyBu());

//8.并行流
list.parallelStream().filter(l -> l > 6).findAny();

//9.joining拼接字符
String collect = personList.stream().map(Person::getSex).collect(Collectors.joining("-"));

completableFuture线程api

主要有runAsync、supplyAsync、thenCombineAsync、thenComposeAsync、allOf、anyOf
CompletableFuture细节代码链接
(备注:有无Async区别主要在线程池的使用上。有Async会重新指定线程,无沿用上一个)

 ExecutorService executor = Executors.newCachedThreadPool();
 
 CompletableFuture.supplyAsync(() -> "hello",executor).thenApply(s -> s + "world").join();      
 CompletableFuture.runAsync(() -> {System.out.println("123");})
 				  .thenApply(s -> s + "apply").join();
 CompletableFuture.supplyAsync(() -> {
            ArrayList<Integer> objects = new ArrayList<>();
            return objects;
        }, executorService).thenCombineAsync(
 CompletableFuture.supplyAsync(() -> {
                    ArrayList<Integer> objects = new ArrayList<>();
                    return objects;
                }), (s1, s2) -> {
                    s1.addAll(s2);
                    return s1;
                }).join();
 CompletableFuture.supplyAsync(() -> 11)
  .thenComposeAsync(param -> CompletableFuture.runAsync(() -> System.out.println())); 
  
			List<CompletableFuture<List<ShoppingCart>>> list = new ArrayList<>();
 CompletableFuture.allOf(list.stream().toArray(CompletableFuture[]::new))
                .thenApply(v -> {
                    List<ShoppingCart> list2 = new ArrayList<>();
                    for (int i = 0; i < list.size(); i++) {
                        list2.addAll(list.get(i).join());
                    }
                    return list2;
                }).join();      
 CompletableFuture.anyOf(futures.toArray(new CompletableFuture[0])).join();
 CompletableFuture.runAsync(() -> {}).exceptionally(e -> {throw new RuntimeException();})       

Optional

Optional.ofNullable(list).orElse(new ArrayList<>()).stream().forEach(data-> {});
Optional.ofNullable(user).orElseGet( () -> user2);//orElseGet只有在user为空时,才会创建。并且参数是suppiler对象
Optional.ofNullable(billGroupSource.getBillSummaryDetailList()).ifPresent(data-> {});


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值