A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天我们JDK9的新特性就学习完毕了,请根据自己的理解回答下面问题:
1、我们目前为止,学了几个函数式接口,都有什么用?
2、获取流有几种方式?
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解

31 个回复

正序浏览
1、我们目前为止,学了几个函数式接口,都有什么用?

Supplier对外提供”一个符合泛型类型的对象数据。
Consumer是消费一个数据,其数据类型由泛型参数决定
Predicate 返回一个布尔值
Function一个类型的数据得到另一个类型的数据

2、获取流有几种方式?

集合:对象的stream( )方法;
通过Stream.of( )静态方法获取;


3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解

函数式接口只有一个抽象方法,具有延迟加载机制;
Stream 是一个函数模型,就像生产流水线一样,实现不同的功能
回复 使用道具 举报
刘慧梅
1、我们目前为止,学了几个函数式接口,都有什么用?
Supplier,生产数据
Consumer,消费数据
Predicate,数据判断
Function,转换类型
2、获取流有几种方式?
根据Collection获取流
根据Map获取流  
根据数组获取流
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口是有且仅有一个抽象方法的接口
Stream流以Lambda的基础,解决集合的弊端

回复 使用道具 举报
1、我们目前为止,学了几个函数式接口,都有什么用?
Supplier 生产者
Consumer 消费一个指定泛型数据
Predicate,判断,返回布尔
Function,一个数据类型转换为另一种类型
2、获取流有几种方式?
集合获取 单列list.stream()
双列map.KeySet.stream() map.values.stream() map.entrySet
数组获取 stream.of(arr)
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口 其实就是在说 见到了 这样的接口应用 比如用在返回值上比如用在参数列表上,实际上就是在说  这里要实现的功能是什么,而我们知道Lambda就是用来实现 具体代码
Stream流 不是集合元素 JDK8中的一个新特性 被我们称为 流 也不是数据结构 不保存数据 它是有关算法和计算操作的 更像高级别版本的迭代器Stream 单向 不可往复  数据只能遍历一次 就好比流水 从前面流过了 一去不复返
回复 使用道具 举报
1、我们目前为止,学了几个函数式接口,都有什么用?
        Runnable:创建线程任务 run()       
        Comparator<T>:排序        compare(T o1,T o2) 将数据按照指定顺序排列
        FileFilter:文件过滤器,accept(File f)   过滤出想要的文件
        supplier<T>:生产者        T get();生产(创建)一个对象
        consumer<T>:消费者        accept(T t);消费(操作)一个对象
        Function<T,R>:数据转换        R apply(T t)        转换传入的数据类型(值)
        Predicate:数据判断        boolean test(T t)        判断传入的数据
       


2、获取流有几种方式?
        单列集合获取:
        Collection.Stream();
       
        双列集合获取:
        Map.entry.Stream()
        Map.keySet().stream()
        Map.value().stream()
       
        数组获取方式:调用默认方法
        Stream.of(T...t);
       
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
        函数式接口,有且只有一个抽象方法的接口,在1.8的特性上通过Lambda的引入与方法引用的配合优化了匿名内部类需要创建各种对象而导致的臃肿的代码,基于Lambda的使用上具有延迟性,强调做什么,而不是怎么做,由面向对象转向了面向函数;

        Stream,将其比作管道,数据的流动就在其中进行,而它的方法功能好比自来水净水厂,对管道中的数据进行加工操作,通过一步步的筛选,
        最终得到想要的结果.通过极少的步骤便可对巨量的数据进行筛选,且具有延迟性,极大地提高了开发效率,美中不足的是,每个Stream流只能消费(操作)一次,且在其中流动的数据
        流向单一不可逆,并且如果未编写终止方法,那么中间的操作步骤将无法得到实现.
回复 使用道具 举报
1、我们目前为止,学了几个函数式接口,都有什么用?Runnable:多线程使用的
Comparble,对象做比较用的
Filter用来过滤文件用的
Supplier:产生一个对象
Consumer:消费一个对象
Predicate:判断一个条件
Function:转换数据类型

2、获取流有几种方式?
三种:1、根据Collections获取流
2、根据Map获取流
3、根据数组方式获取流

3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
Stream流是基于函数式接口之上的一种新的编程思想,它不在像传统编程思想一样要怎么做一件事情,而更注重的是做什么。初衷是为了能让程序员以最简洁的代码完成更复杂的
任务,Stream流它好比一条正在生产的流水线,我们可以对流水线上的产品进行筛选处理得到我们最终想要的结果。所有的Stream流都必须是函数式接口
回复 使用道具 举报
1.Supplier接口其中Tget()方法无参返回一个跟泛型相同的数据类型数据。Consumer接口其中accept(T t)无返回值从而消费了一个数据类型的数据。Predicate接口抽象方法test(T t)返回一个布尔值用于对某种类型的数据进行判断。Function接口抽象方法R apply(T t)可以返回一个相同或者不同的数据类型。

2.所有的Collection集合可以通过调用stream获取流。Map接口通过map集合对象调用keySet,values,entrySet在相应调用stream获取流。数组通过调用of方法。

3.函数接口主要为了Lambda表达式服务,使我们的代码更简洁可以等到同样的结果,使函数编程应用更广泛。Stream流主要是解决集合类库的弊端。
回复 使用道具 举报
彭东亮
1、我们目前为止,学了几个函数式接口,都有什么用?
(1)Supplier接口:用来获取一个泛型参数指定类型的对象数据;
(2)Consumer接口:是用来“消费”一个数据,其数据类型由泛型参数决定;
(3)Predicate接口:对数据进行判断;
(4)Function接口:进行数据类型的转换。
2、获取流有几种方式?
总共有三种获取流的方式,分别为:
(1)可以通过Stream默认方法获取单列集合,双列集合的流;
(2)通过Stream 接口的静态方法 of 可以获取数组对应的流。
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口具有延迟性,节约了资源,解决了代码臃肿的问题;
使用Stream流时通过引用函数式接口,就能有效的到达我们所想要的结果,有效节约资源
回复 使用道具 举报

王博

1、我们目前为止,学了几个函数式接口,都有什么用?

Runnable: 创建线程
Comparator: 外部比较器
FileFilter: 文件过滤器
Supplier: 生产型
Consumer: 消费型
Predicate: 按条件筛选
Function: 根据一个类型得到另一个类型

2、获取流有几种方式?

Collection 集合: 通过集合对象名调用 stream(); 方法
Map 集合: 通过获取键集或者值集,再来调用 stream();方法
数组: 通过Stream.of(数组对象);

3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
Lambda函数式接口更强调做什么,省去了不必要的一些创建对象的操作,对匿名内部内的优化
Stream用于解决已有集合类库既有的弊端,是对遍历集合,对Lambda的优化

回复 使用道具 举报
黄希

1、我们目前为止,学了几个函数式接口,都有什么用?
        Comparable接口:实现固定的比较方法
        Comparator接口:实现临时的比较方法
        FileFilter接口:筛选符合条件的文件或文件夹
        Supplier接口:对外提供一个符合泛型类型的对象
        Consumer接口:消费一个数据,不返回数据
        Predicate接口:对某种类型的数据进行判断,返回boolean值
        Function接口:将某种类型的数据转换成另一种类型的数据

2、获取流有几种方式?
        1、根据Collection获取流
                使用java.util.Collection接口中的默认方法stream()获取流
                        Collection集合.stream()
       
        2、根据Map获取流
                先获取Map对象的键、值或entry集合,再使用stream()方法获取流
                        Map对象.keySet().Stream()
                        Map对象.values().Stream()
                        Map对象.entrySet().Stream()
       
        3、根据数组获取流
                使用Stream接口中的静态方法of()获取流
                        Stream.of(数组对象)

3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
        函数式接口指的是有且只有一个抽象方法的接口。
        所有函数式接口的实现类对象,都可以使用Lambda表达式进行替换,具有延迟执行的特性。
        如果Lambda表达式中的操作,已经在其他地方定义成方法,那么还可以使用方法引用来替代。
        Stream流是Java8引入的概念,用于解决已有集合类库的弊端,简化代码。
        Stream流是一个集合元素的函数模型,不是集合,也不是数据结构,不存储任何元素。
        像是生产流水线,从一个流模型转换成另一个流模型,允许多次转换,转换过程均是延迟操作。
        流模型的方法分为两种:
                返回值类型还是Stream接口类型的方法,称为延迟方法,例如filter、map、limit、skip;
                返回值类型不再是Stream接口类型的方法,称为终结方法,例如count、forEach。

回复 使用道具 举报
1、我们目前为止,学了几个函数式接口,都有什么用?
Runnable:多线程任务
Comparator:比较
FileFilter:文件过滤器

Supplier:生产数据
Consumer:消费数据
Predicate:判断数据
Function:转换数据

另外,并未深入学习但是有用到的接口
Collector(收集流的结果到集合时候使用了及格已经定义好的该接口的实现类(Collectors.toList和toSet)
IntFunction(在把流的结果收集到数组中时以引用数组的构造方法的形式使用)

2、获取流有几种方式?
从单列Collection获取流:直接调用stream();方法
从双列集合Map获取流:两种思路
1)keySet()方法获取键集合,然后对键集使用stream()方法;
2)entrySet()方法获取键值对集合,然后对键值对集使用stream()方法;

3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口,和Stream流,以及之前学过的Lambda表达式,作为函数式编程在Java语言中的体现,让开发者将更多的精力用在“做什么”上,而不是因为面向对象冗长的语法结构而把问题转移到仅仅是作为固定格式“怎么左”上。
流通过使用大量的函数式接口并配合Lambda表达式(关于流的操作不能使用匿名内部类,必须使用Lambda表达式),以类似于“流水线作业”的形式使得对于集合、数组等的操作从语法上更加简单直观,侧重于目的,大幅度提高了开发效率。
回复 使用道具 举报
彭东亮
1、我们目前为止,学了几个函数式接口,都有什么用?
(1)Supplier接口:用来获取一个泛型参数指定类型的对象数据;
(2)Consumer接口:是用来“消费”一个数据,其数据类型由泛型参数决定;
(3)Predicate接口:对数据进行判断;
(4)Function接口:进行数据类型的转换。
2、获取流有几种方式?
总共有三种获取流的方式,分别为:
(1)可以通过Stream默认方法获取单列集合,双列集合的流;
(2)通过Stream 接口的静态方法 of 可以获取数组对应的流。
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口具有延迟性,节约了资源,解决了代码臃肿的问题;
使用Stream流时通过引用函数式接口,就能有效的到达我们所想要的结果,有效节约资源
回复 使用道具 举报
1、我们目前为止,学了几个函数式接口,都有什么用?
Supplier<T> 接口 生产一个数据
Comsumer<T>接口 消费一个数据

Function<T,R>接口 转换

Predicate<T>接口 判断 返回一个布尔类型的值

2、获取流有几种方式?
集合名.stream
静态方法 Stream.of()获取

3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口是因为Lamdba衍生而来的 减轻我们的代码量 在代码中更能体现出我们要做的是什么! 而不是怎么做 !
Stream流也是延续了方法引用的特性 注重的是做什么 而不是怎么做 那么Stream流是在我们操作集合的时候 更加方便我们对集合的操作 减轻我们的代码量


回复 使用道具 举报
吴香斌


1、我们目前为止,学了几个函数式接口,都有什么用?

runnable:是线程启动后,执行语句
comparator:是比较器,用于sort方法
Supplier:是生成接口,无参有返回值
Consumer:是消费接口,有参无返回值
Predicate:是布尔型比较接口,返回值是boolean,有默认方法andThen,可以添加多个比较条件
Function:是数据转换接口,将传入的参数转换为另一种参数进行返回.

2、获取流有几种方式?

不同的数据类型有不同的获取流方式
单链集合:调用stream()方法获取
双链集合:获取单独的键,值或者是键值对,然后再调用stream()方法获取
数组:将数组传入Stream.of()中获取

3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解

函数式接口主要是为Lambda服务,Lambda表达式通过函数式接口得到实现.
所有stream的操作必须以Lambda表达式为参数.


回复 使用道具 举报
林梅源
1、我们目前为止,学了几个函数式接口,都有什么用?
1、supplier接口,用来获取一个泛型参数指定类型的对象,生产;
无参方法;get;
2、Consumer接口,消费一个指定泛型的数据,抽象方法是accept;
默认方法是andthen
3、Predicate接口,返回一个boolean值,用于条件判断,抽象方法是Test
默认方法:and与,or或,negate飞;
4、Function接口,将前面类型转换成后面类型的数据,抽象方法是apply
2、获取流有几种方式?
所有Collection集合都可以通过Stream方法获取流
Stream静态接口of可以获取数组对应的流
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
做什么,而不是怎么做。
回复 使用道具 举报
郑雪平

今天学习常用函数式接口和Stream流,常用的函数式接口讲了predicate接口和function接口,predicate接口中有四种方法:抽象方法test;默认方法and,  or,和negate三个方法;抽象方法test用于条件判断的场景,or方法用于实现逻辑关系中的"或";Function接口相对于predicate接口而言它没那么多方法,只有抽象方法为R apply和默认的 andThen 方法两个;andThen 方法用来进行组合操作。
   Stream流它也是一种流,但是它不属于IO流范畴,是一个全新的Stream概念,用来解决已有集合类库既有的弊端。那么怎么去获取Stream流?可以通过三种方法获取:1.通过Collection 获取;2.通过Map来获取;3.根据数组来获取。它的常用的方法有:1.filter 过滤;2.count 统计个数;3.limit取用前几个;4.skip 跳过前几个;5.map映射;6.concat 合并两个流;7.forEach 逐一处理。
回复 使用道具 举报
1、我们目前为止,学了几个函数式接口,都有什么用?
Supplier<T> 生产一个指定泛型
Consumer<T> 消费一个指定泛型
Predicate 判断一个指定的泛型是否满足条件。
Function 将一个泛型转换为另外一个泛型
2、获取流有几种方式?
对象.Stream;  Stream.of()
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口为了解决代码冗余,节约资源,使lambda广泛运用;
Stream流解决了集合类库的弊端,节省资源,减少代码量
回复 使用道具 举报
1、我们目前为止,学了几个函数式接口,都有什么用?
Supplier,返回值泛型<T>,生成一个泛型数据类型.
Consumer,返回值void,消费一个数据.包含一个andThen方法,返回一个consumer数据,作用与对一个数据的多次消费.
Function<T,V>,返回值为V泛型数据,用于数据类型的转换.包含一个andThen方法,用于数据转换的多次操作,例如 :String -> Integer -> Double
Predicate<T>,用于判断参数是否满足判断条件.

2、获取流有几种方式?Collections单列集合的子实现类获得,格式 : 集合名.stream
静态方法,Stream.of(变量名);获得,

3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解

函数式接口是一个功能接口,有且仅有一个抽象方法,通过lambda表达式去定义规则,具有延迟机制(在调用最终结果的时候才会运行中间方法),Stream流和函数式接口是配套起来用的,因为Stream流里的书写方法必须都要用lambda表达式,Stream流则是对一个集合做的优化操作,代码主要关注点在做什么(what),而不是怎么做(how).

雷锋

回复 使用道具 举报
1、我们目前为止,学了几个函数式接口,都有什么用?
Supplier“对外提供”一个符合泛型类型的对象数据
Consumer  消费一个指定泛型的数据
Predicate 对数据进行判断返回Boolean值
Function  口用来根据一个类型的数据得到另一个类型的数据
2、获取流有几种方式?
根据Collection获取流
根据Map获取流
根据数组 Stream.of(arr)
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口 有一个抽象方法 解决问题以前需要复杂的代码 而函数式接口可以简化代码  Stream是流动的数据 使用其方法进行操作
回复 使用道具 举报
杨银万
1、我们目前为止,学了几个函数式接口,都有什么用?
Supplier接口,抽象方法get(),可以产生泛型对应类型的对象
Consumer接口,抽象方法accept(T t),可以使用泛型对应类型的对象
Predicate接口,抽象方法test(),可以进行判断操作返回布尔类型
Function接口,抽象方法R apply(T t),可以进行类型转换的操作,将T泛型对应类型的对象转换成R泛型对应类型的对象
2、获取流有几种方式?
三种:
单例集合获取:List对象.stream()。Set对象.stream()
双例集合获取:Map对象.keySet().stream()。Map对象.values().stream()。Map对象.entrySet().stream()
数组获取:Stream.of(数组)。Arrays.stream(数组)
3、结合最近所学,请谈谈你对函数式接口以及Stream流的理解
函数式接口是只有一个抽象方法的接口,这样的接口在使用时注重的是方法的实现即方法体的内容,不在乎接口实现类的创建,于是可以用注重操作过程的函数式编程来使用该类接口,用Lambda表达式和方法引用的方式可以简化书写。
Stream流是基于函数式编程的一种全新思想,用来解决集合类库的弊端,Stream流没有数据结构,不对数据进行存储,只能对数据进行一次遍历,单向不可往复,对数据进行更新时替换到另一个新的流中。

点评

发表于 2019-7-21 00:37
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马