• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

java8新特性之 StreamApi Stream流的中间操作(二)

java8新特性 来源:托尼吴 2次浏览

多个中间操作可以连接起来形成一个流水线,除非流水线上触发中止操作,否则中间操作不会执行任何的处理,而在中止操作时一次性全部处理

/*********************************************** Stream流的中间操作 ***************************************************************/   /**  * Stream流的中间操作  */   /**  * 筛选与切片  *  * filter - 接受Lambda,从流中排除某些元素  * limit - 截断流,使其元素不超过给定数量  * skip(n) - 跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n,则返回一个空流,limit互补  * distinct - 筛选,通过流所生产元素的hashCode() equals() 去除重复元素  */ final List<Use> list = Arrays.asList(
        new Use( "a",1,3 ),
        new Use( "e",5,4 ),
        new Use( "c",2,5 ),
        new Use( "b",4,2 ),
        new Use( "e",3,1 ));

//内部迭代
@Test
public void test2() {

    /**  * 中间操作不会单独执行.只有执行中止操作才会去执行中间,  */  //创建Stream对象
   Stream stream =  list.stream()
           //中间操作
            /** filter里面是一个断言型接口,传入一个参数,返回一个booleanfilter - 接受Lambda,从流中排除某些元素*/  .filter( (x) -> x.getId()>1);
            //中止操作
            stream.forEach( System.out::println );

}

@Test
public void test4() {
    list.stream()
            .filter( (x) -> x.getSaler()>2 )
            /**只需要找到满足条件之后,就不会去继续迭代其他,提高了效率, limit - 截断流,使其元素不超过给定数量*/  .limit( 2 )
            .forEach( System.out::println );
}


@Test
public void test5() {
    list.stream()
            .filter( (x) -> x.getId()>0 )
            .limit(3 )
            /**skip(n) - 跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n,则返回一个空流,limit互补*/  .skip( 2 )
            .forEach( System.out::println );
}


@Test
public void test6() {
    list.stream()
            .filter( (x) -> x.getId()>0 )
            .limit( 5 )
            .skip( 2 )
            /**distinct - 筛选,通过流所生产元素的hashCode() equals() 去除重复元素 在使用此方式时一定要重写hashCode() equals()*/  .distinct()
            .forEach( System.out::println );
}
//外部迭代
@Test
public void test3() {
    Iterator<Use> stream = list.iterator();
    if(stream.hasNext()) {
        System.out.println(stream.next());
    }

}




/**  * 映射  *  * map - 接收Lambda,将元素转化成其他形式或提取信息,接收一个函数作为参数,改元素会应用到每个元素上,  * 并将其映射成一个新的元素,  *  * flatMap - 接收一个函数作为参数,将流中的的每个值都换成另一个流,然后把所有的流连接成一个流  */  @Test
public void test7() {
    List<String> slist = Arrays.asList( "aa","bb","cc","dd","ee","ff","gg" );
    slist.stream()
            /**map 的作用是将集合中的每个属性放在函数中去执行,执行的结果作为一个新的流,最后在中止操作中打印出来*/  .map( (x) -> x.toUpperCase() )
            .forEach( System.out::println );


            list.stream()
                    .map( Use::getSaler )
                    .forEach( System.out::println );



            //
          Stream<Stream<Character>>  ssss =  slist.stream()
                    .map( (x) -> getString( x ));

          ssss.forEach( (x) ->{
              x.forEach( System.out::println );
          } );
}


@Test
public void test8() {
    List<String> slist2 = Arrays.asList( "aa","bb","cc","dd","ee","ff","gg" );
    /**map是使一个流中,存在几个小的流,这样就形成了几个小的流.形成一个大的流,所有在遍历时先去遍历大的流.得到每个小的流后再去遍历这个小流*/  Stream<Stream<Character>>  ssss =  slist2.stream()
            .map( (x) -> getString( x ));

    ssss.forEach( (x) ->{
        x.forEach( System.out::println );
    } );



    /**flatMap - 接收一个函数作为参数,将流中的的每个值都换成另一个流,然后把所有的流连接成一个流*/  Stream<Character> stream = slist2.stream()
            .flatMap( (x) -> getString( x ) );

    stream.forEach( System.out::println );

}

public static Stream<Character> getString(String str) {
    List<Character> sslist = new ArrayList <>(  );
    for(Character c:str.toCharArray()) {
        sslist.add( c );
    }
    return sslist.stream();
}




/**  * 排序  *  * sortrd - 自然排序  *  * sorted(Comparator con) - 定制排序  */  @Test
public void test9() {
    List<String> slist2 = Arrays.asList( "bb","ff","cc","dd","aa","ee","gg" );
    slist2.stream()
            //自然排序
            .sorted()
            .forEach( System.out::println );


    list.stream()
            //定制排序
            .sorted((x,y) -> {
                if(x.getId( ).equals( y.getId( ) )) {
                    return x.getSaler().compareTo( y.getSaler() );
                }else {
                    return x.getId().compareTo( y.getId() );
                }})
            .forEach( System.out::println );
            ;
}






版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)