java stream使用

java stream的特性能大大提高代码的可观赏性,而且使用起来非常方便。由于项目开发中经常用到一些stream的操作,记录下来回忆之用。也供大家参考

/**
 * 移除数组中是空的元素
 */
public void removeblank(){
    List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    //结果"aa","bb","cc","bb","dd"
    stringList.stream().filter(p->!p.equals("")).collect(Collectors.toList()).forEach(System.out::println);
}

public void distinct(){
    List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    //结果 "aa","bb","cc","","dd"
    stringList.stream().distinct().forEach(System.out::println);
}

/**
 * 是否全部匹配
 */
public void allMatch(){
    List<String> stringList= Arrays.asList(new String[]{"","bb"});
    boolean result= stringList.stream().allMatch(p->p.equals(""));
    //结果false
    System.out.println(result);
}

/**
 * 是否匹配其中一个
 */
public void anyMatch(){
    List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    boolean result= stringList.stream().anyMatch(p->p.equals(""));
    //结果true
    System.out.println(result);
}

/**
 * 是否一个都不匹配
 */
public void noneMatch(){
    List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    boolean result= stringList.stream().noneMatch(p->p.equals("ff"));
    //结果true
    System.out.println(result);
}

/**
 * forEachOrdered和forEach
 * 开启并行时候强制保证有序或者无序
 */
public void foreachSortandforeach(){
    List<String> stringListOrder= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    //结果"aa","bb","cc","bb","","dd"
    stringListOrder.stream().parallel().forEachOrdered(System.out::println);

    List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    //结果随机的顺序
    stringList.stream().parallel().forEach(System.out::println);
}

/**
 *去掉前n个skip(n)中的值返回一个新list
 */
public void skip(){
    List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    //"bb","","dd"
    stringList.stream().skip(3).forEach(System.out::println);
}

/**
 * 返回原list的前n个值,并返回一个新list
 */
public void limit(){
    List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    //结果"aa","bb","cc"
    stringList.stream().limit(3).forEach(System.out::println);
}

/**
 * peek方法方法会使用一个Consumer消费流中的元素,但是返回的流还是包含原来的流中的元素。
 */
public void peek(){
    List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","","dd"});
    System.out.println(stringList.stream().peek(System.out::println).count());
}

/**
 * 默认升序
 */
public void sorted(){
    List<Integer> stringList= Arrays.asList(new Integer[]{1,3,5,2,9,6});
    stringList.stream().sorted().forEach(System.out::println);
}

/**
 * 降序
 */
public void sortedReverse(){
    List<Integer> stringList= Arrays.asList(new Integer[]{1,3,5,2,9,6});
    stringList.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
}

/**
 * 自定义排序,按姓名的首字母的ascii码排序
 * 三种不同的comparator写法
 */
public void sortedDefine(){
    List<User> userList=new ArrayList<>();
    User user=new User();
    user.setName("json");
    user.setSex("male");
    User user1=new User();
    user1.setName("Tomas");
    user1.setSex("female");
    userList.add(user);
    userList.add(user1);
    //第一种写法
    userList.stream().sorted(new Comparator<User>() {
        @Override
        public int compare(User o1, User o2) {
            return o1.getName().charAt(0)-o2.getName().charAt(0);
        }
    }).forEach(System.out::println);
    //第二种写法
    userList.stream().sorted((s1,s2)->{return s1.getName().charAt(0)-s2.getName().charAt(0);}).forEach(System.out::println);
    //第三种写法
    userList.stream().sorted(Comparator.comparing(User::getName)).forEach(System.out::println);
}

/**
 * list求和
 */
public void reduce(){
    List<Integer> integerList= Arrays.asList(new Integer[]{1,3,5,2,9,6});
    //结果26,求和
    System.out.println(integerList.stream().reduce((s1,s2)->s1+s2).get());
}

/**
 * 增加所有姓名的一个前缀
 * 其中一种User类加lombok的@Builder标签
 */
public void addPrex(){
    List<User> userList=new ArrayList<>();
    User user=new User();
    user.setName("json");
    user.setSex("male");
    User user1=new User();
    user1.setName("Tomas");
    user1.setSex("female");
    userList.add(user);
    userList.add(user1);
    String prex="前缀";
    //结果 前缀;json前缀;Tomas
    // userList.stream().map(p->prex+";"+p.getName()).collect(Collectors.toList()).forEach(System.out::println);
    userList.stream().map(p->new User(prex+";"+p.getName(),p.getSex())).forEach(System.out::println);


    //User类加lombok的@Builder标签
    userList.stream().map(p->User.builder()
        .name(prex+";"+p.getName())
        .sex(p.getSex()).build()).forEach(System.out::println);
}

/**
 * 字符串合并中间+"#"
 */
public void listToString(){
   List<String> stringList= Arrays.asList(new String[]{"aa","bb","cc","bb","dd"});
   //结果 aa#bb#cc#bb#dd
   System.out.println(stringList.stream().collect(Collectors.joining("#")));
}

/**
 * 分组排序
 */
public void UserlistToString(){
    List<User> userList=new ArrayList<>();
    User user=new User();
    user.setName("json");
    user.setSex("male");
    User user1=new User();
    user1.setName("Tomas");
    user1.setSex("female");
    User user2=new User();
    user2.setName("kifta");
    user2.setSex("female");
    userList.add(user);
    userList.add(user1);
    userList.add(user2);
    userList.stream().collect(Collectors.groupingBy(p->p.getSex())).entrySet().stream().forEach(System.out::println);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java StreamJava 8 中新增的一个 API,用于处理集合数据。它提供了一种更加简洁、高效的方式来操作集合,可以让代码更加简洁、易读、易维护。下面是 Java Stream 的基本使用方法: 1. 创建流 Java Stream 可以从多种数据源中创建,比如集合、数组、文件等。例如,从集合创建一个 Stream 可以使用以下代码: ```java List<String> list = new ArrayList<>(); Stream<String> stream = list.stream(); ``` 2. 中间操作 中间操作是指对 Stream 进行操作,返回一个新的 Stream。常见的中间操作包括:filter、map、sorted、distinct 等。例如,下面的代码使用 filter 操作过滤出长度大于 5 的字符串: ```java List<String> list = Arrays.asList("apple", "banana", "orange", "watermelon"); Stream<String> stream = list.stream().filter(s -> s.length() > 5); ``` 3. 终止操作 终止操作是指对 Stream 进行最终的操作,返回一个非 Stream 的结果。常见的终止操作包括:forEach、reduce、collect、count 等。例如,下面的代码使用 forEach 操作输出过滤后的字符串: ```java List<String> list = Arrays.asList("apple", "banana", "orange", "watermelon"); list.stream().filter(s -> s.length() > 5).forEach(System.out::println); ``` 4. 短路操作 短路操作是指对 Stream 进行操作时,只要满足一定条件就可以停止操作,不必对整个流进行操作。常见的短路操作包括:findFirst、findAny、allMatch、anyMatch、noneMatch 等。例如,下面的代码使用 findAny 操作找到第一个长度大于 5 的字符串: ```java List<String> list = Arrays.asList("apple", "banana", "orange", "watermelon"); Optional<String> result = list.stream().filter(s -> s.length() > 5).findAny(); ``` 以上就是 Java Stream 的基本使用方法,需要注意的是,Stream 是一次性的,一旦进行了终止操作,就不能再对该 Stream 进行操作。同时,Stream 也是惰性求值的,只有在终止操作时才会进行真正的计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值