首页 > 其他分享 >448stream流中的常用方法_concai和451方法基本介绍

448stream流中的常用方法_concai和451方法基本介绍

时间:2022-09-23 01:22:22浏览次数:55  
标签:concai Stream 451 流中 System println out 方法 Lambda

组合concat

如果有两个流,希望合并成为一个流,那么可以使用Stream接口的静态方法concat

static <T>Stream<T> concat(Stream<? extends T> a,Stream<? extends T> b)

备注:这是一个静态方法,与Java.long.String当中的concat方法不同的

/*
Stream流中的常用方法_concat:用于把流组合到一起
如果有两个流,希望合并成为一个流,那么可以使用Stream接口的静态方法concat
static <T> Stream<T> concat (Stream<? extends T> a,Stream<? extends T> b)
 */ 
   public static void main(String[] args) {
        //创建一个Stream流
        Stream<String> stream = Stream.of("杰瑞", "汤姆", "泰非", "派克", "橘猫");
        String [] arr={"猪猪侠","超人强","小飞飞","小呆呆","波比"};
        Stream<String> stream1 = Stream.of(arr);
        //把以上两个流合并成一个流
        Stream<String> stream2 = Stream.concat(stream,stream1);
        //遍历流
        stream2.forEach(name-> System.out.println(name));
    }
}

方法引用

在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案∶拿什么参数做什么操作。那么考虑一种情况︰如果我们在Lambda中所指定的操作方案,

已经有地方存在相同方案,那是否还有必要再写重复逻辑?
看标题就是使用什么方法来引用方法

冗余的lamdba场景

来看一个简单的函数式接口以应用Lambda表达式:

@FunctionalInterface
public interface Printable {
void print(String str);
}

在Printable接口当中唯一的抽象方法print接收一个字符串参数,目的就是为了打印显示它。那么通过Lambda来使用它的代码很简单∶

/*
定义一个打印的函数式接口
 */
@FunctionalInterface
public interface Printable {
    //打印字符串的抽象方法
    void prints(String s);
}


public class Demo01Printable { //定义一个方法,参数传递printable对字符串进行打印 public static void printString(Printable p){ p.prints("HelloWorld"); } public static void main(String[] args) { //调用printString方法,方法的参数Printable是一个函数式接口,所以可以传递Lambda printString((s)->{ System.out.println(s); }); /* 分析: Lambda表达式的目的,打印参数传递的字符串 把参数s,传递给了system.out对象,调用out对象中的方法printLn对字符串进行了输出注意: 1.System.out对象是已经存在的2.printLn方法也是已经存在的 所以我们可以使用方法引用来优化Lambda表达式 可以使用System.out方法直接引用(调用)println方法 */ //::是方法引用的一个运算符用对象来引用方法对字符串进行输出 printString(System.out::println); } }

 

方法引用符 ::

双冒号:为引用运算符,而它所在的表达式被称为**方法引用**。如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者。
语义分析
例如上例中,System.out对象中有一个重载的println(String)方法恰好就是我们所需要的。那么对于printstring方法的函数式接口参数,对比下面两种写法,完全等效∶
Lambda表达式写法:s -> system.out.println(s );
方法引用写法: System.out : : println
第一种语义是指︰拿到餐数之后经Lambda之手,继而传递给System. out.println方法去处理。
第二种等效写法的语义是指∶直接让system.out 中的println方法来取代Lambda。两种写法的执行效果完全一样,而第二种方法引用的写法复用了已有方案,更加简洁。
注:Lambda中传递的参数一定是方法引用中的那个方法可以接收的类型,否则会抛出异常


 

标签:concai,Stream,451,流中,System,println,out,方法,Lambda
From: https://www.cnblogs.com/agzq/p/16721373.html

相关文章

  • 444stream流中的常用方法_map和445Stream流中的常用方法_count
    映射Map如果需要将流中的元素映射到另一个另一个流中,可以使用map方法方法签名:<R>Stream<R>map(Function<?superT,?extendsR>mapper);该接口需要一个Function......
  • 441stream流中的常用方法_forEach和442Stream流中的常用方法_filter
    常用方法forEach   流模型的操作很丰富,这里介绍一些常用的APl。这些方法可以被分成两种:延迟方法︰返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。(除......
  • 做题记录整理线段树2 P4513. 小白逛公园(2022/9/20)
    P4513.小白逛公园我们思考一个如何使用线段树维护这个答案,会发现l.r的答案=max(l,mid的答案,mid+1,r的答案,横跨两个区间的答案)那么我们现在再引入一个区间的最大前缀......
  • 河南省人才交流中心 All In One
    河南省人才交流中心AllInOnehttps://yz.chsi.com.cn/apply/jbxx/sep1.do考生档案所在地:41(河南省)01(郑州市)00(其他)考生档案所在的省。(直辖市,自治区)考生档案......
  • Stream流中使用的Fork/Join框架
            Fork/Join简单案例:使用Fork/join计算1-10000的和当一个任务的计算数量大于3000的时候拆分任务,数量小于3000的时候就计算packagecom.tuling.st......
  • 外设驱动库开发笔记45:MS4515DO压力传感器驱动
      很多时候我们需要检测流量和压力这些参数,比如我们要检测大气压,或者通过测量差压来获得输送流体的流量等,都需要用到压力传感器。这一篇我们就来讨论MS4515DO压力传感器......
  • P4513 小白逛公园
    求动态区间最大子段和,并支持单点修改。\(n\leq5\times10^5,m\leq10^5\)。用线段树处理。对于每一个节点维护以下变量:\(ans\)表示区间内最大子段和,\(sum\)表示区间......
  • P1451 求细胞数量
    P1451求细胞数量分析:根据题意,不为0的数连在一起是一个细胞,就是用bfs进行搜索,先是让初始点进入队列,记录下队头的点并向他的上下左右搜索,在没有越界且是细胞(不为0)的情况下......
  • CF451B
    题目简化和分析:这题就是判断将一段翻转后是否能变为升序的数组。我的方法是保存原数组每一个数出现的位置(相同任意一个),让后另外用一个数组存储排好序后的原数组,逐一进行......
  • 8位MCU的2.4G SOC芯片-CI2451
      Ci2451是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片。 主要应用在无线鼠标、无线键盘、无线遥控、体感设备、无线数据传输模块、无线遥控玩具等领域。......