joo工作流_让我们用jOOλ在Java 8中流式传输地图

joo工作流

我想找到一种简单的方法来用Java 8流式传输Map 。猜猜是什么? 没有!

为了方便起见,我期望的是以下方法:

public interface Map<K, V> {default Stream<Entry<K, V>> stream() {return entrySet().stream();}    
}

但是没有这样的方法。 可能不存在这种方法的原因可能多种多样,例如:

  • 没有选择keySet()values()作为流源的entrySet() “明确”首选项
  • Map并不是真正的收藏。 这甚至不是一个可Iterable
  • 那不是设计目标
  • EG没有足够的时间

好吧,对于Map进行改型以提供entrySet().stream()并最终实现Iterable<Entry<K, V>> ,这是一个非常令人信服的理由。 那就是我们现在有了Map.forEach()的事实:

default void forEach(BiConsumer<? super K, ? super V> action) {Objects.requireNonNull(action);for (Map.Entry<K, V> entry : entrySet()) {K k;V v;try {k = entry.getKey();v = entry.getValue();} catch(IllegalStateException ise) {// this usually means the entry is no longer in the map.throw new ConcurrentModificationException(ise);}action.accept(k, v);}
}

在这种情况下, forEach()接受BiConsumer ,该BiConsumer实际上消耗了映射中的条目。 如果您搜索JDK源代码,则Map.forEach()之外的BiConsumer类型的引用实际上很少,也许还有几个CompletableFuture方法和几个流收集方法。

因此,几乎可以假设BiConsumer受到此forEach()方法的强烈驱动,这对于使Map.Entry在整个collection API中成为更重要的类型是一个很好的例子(我们更喜欢Tuple2类型,课程)。

让我们继续这种思路。 还有Iterable.forEach()

public interface Iterable<T> {default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}}
}

尽管有细微的差别,但Map.forEach()Iterable.forEach()直观地迭代了各自收集模型的“项”。

  • Iterable.forEach()期望Consumer获得单个值
  • Map.forEach()期望BiConsumer两个值:键和值( 不是 Map.Entry !)

这样考虑:

这使得这两种方法在“鸭子输入意义上”不兼容,这使得两种类型的差异更大

mm!

用jOOλ改善地图

我们发现这很古怪且违反直觉。 实际上, forEach()并不是Map遍历和转换的唯一用例。 我们希望有一个Stream<Entry<K, V>>甚至更好的是Stream<Tuple2<T1, T2>> 。 因此,我们在jOOλ中实现了该功能 ,这是我们为jOOQ的集成测试开发的库。 使用jOOλ,您现在可以将Map封装为Seq类型(“ Seq”表示顺序流,即具有更多功能特征的流):

Map<Integer, String> map = new LinkedHashMap<>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");assertEquals(Arrays.asList(tuple(1, "a"), tuple(2, "b"), tuple(3, "c")),Seq.seq(map).toList()
);

您能用它做什么? 如何创建一个新的Map ,一次性交换键和值:

System.out.println(Seq.seq(map).map(Tuple2::swap).toMap(Tuple2::v1, Tuple2::v2)
);System.out.println(Seq.seq(map).toMap(Tuple2::v2, Tuple2::v1)
);

以上两种都将产生:

{a=1, b=2, c=3}

仅作记录,以下是使用标准JDK API交换键和值的方法:

System.out.println(map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey))
);

可以做到,但是标准Java API每天的冗长性使得事情很难读/写。

翻译自: https://www.javacodegeeks.com/2014/10/lets-stream-a-map-in-java-8-with-jooλ.html

joo工作流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中递归函数写法_python递归函数用法详解

上期我们介绍了函数式编程&#xff0c;这期内容就是关于递归的函数内容&#xff0c;本期还是按照老规矩&#xff0c;给大家进行核心整理&#xff0c;内容通俗易懂&#xff0c;搭配实际应用&#xff0c;以供大家理解。 关于递归&#xff1a; 百度解释&#xff1a;是指函数/过程/…

计算机实践ps折扇,用PS打造一把水墨画折扇的教程

一、新建一个600 * 400像素的文件&#xff0c;背景填充为白色&#xff0c;新建一个图层按Alt Ctrl ’调出往格线&#xff0c;然后选择钢笔工具勾出下图所示的路径。二、按Ctrl Enter把路径转为选区&#xff0c;填充为40%灰&#xff0c;再新建一个图层&#xff0c;在下端点一…

输出 Hello World 混乱C语言的源代码

下面的六个程序片段主要完成这些事情&#xff1a;输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过&#xff0c;只有最后一个需要动用C 的编译器g 才能编程通过。lns"http://www.w3.org/2000/svg" x"0px" y"0px" viewbox&…

电商常用同义词库_【福利】不可错过的电商设计神器,提高工作效率

开启高效设计&#xff0c;拒绝每天加班&#xff0c;设计助理插件&#xff0c;设计师高效设计神器&#xff0c;让你早下班的设计神器&#xff1b;今天介绍一款非常人性化的插件&#xff0c;尤其适合做电商设计的小伙伴设计助理插件官网视频介绍↓设计助理插件https://www.zhihu.…

hibernate乐观锁_Hibernate Collection乐观锁定

hibernate乐观锁介绍 Hibernate提供了一种乐观的锁定机制 &#xff0c;即使长时间通话也可以防止更新丢失 。 结合实体存储&#xff0c;跨越多个用户请求&#xff08;扩展的持久性上下文或分离的实体&#xff09;&#xff0c;Hibernate可以保证应用程序级的可重复读取 。 脏检…

turtle fillcolor_使Python中的turtle模块画图两只小羊

import turtle import time import math as m class Sheep(object):def __init__(self,xsize):self.t turtle.Turtle()self.xsize xsizet self.t# 画笔设置t.screen.screensize(canvwidth1000,canvheight500,bgwhite)t.pensize(2)t.speed(10)# t.hideturtle()#初始化画笔位置…

计算机鼠标介绍教学反思,《玩转鼠标》教学反思

《玩转鼠标》教学反思《玩转鼠标》是浙江摄影出版社出版的小学信息技术三年级第一单元中的第3课。这节课其实是上一节课的延伸&#xff0c;是一节复习课&#xff0c;起到巩固强化的目的&#xff0c;主要任务是让学生熟练掌握鼠标的基本操作方法&#xff0c;学会软件的打开和关闭…

openshift_在OpenShift上托管的WildFly实例上进行Arquillian测试

openshift技术提示&#xff03;54解释了如何为现有Java EE项目启用Arquillian。 在该技巧中&#xff0c;测试是针对本地安装的WildFly服务器运行的。 如果此WildFly实例在OpenShift上运行&#xff0c;那么同一个适配器也可以工作吗&#xff1f; 没有&#xff01; 因为与xlocal…

C语言实现魔方阵代码及解析

问题描述编写程序&#xff0c;实现如下表所示的5-魔方阵。172418152357141646132022101219213111825295-魔方阵问题分析所谓“n-魔方阵”&#xff0c;指的是使用1〜n2共n2个自然数排列成一个nn的方阵&#xff0c;其中n为奇数&#xff1b;该方阵的每行、每列及对角线元素之和都相…

600度近视眼恢复方法_近视孩子的家长看看:600度以上近视可致盲,不花钱恢复视力法...

现在孩子近视早已经不是什么新鲜事了&#xff0c;一个班级里面有3分之一的孩子都近视&#xff0c;数据显示&#xff1a;目前中国学生近视发病率接近60%&#xff0c;居世界首位&#xff01;中小学生近视率已达34.6%&#xff0c;高中近视率已达70%。患者人数超过六千万&#xff0…

xbox360 功率测试软件,【外星人 Alpha ASM100-1580 游戏主机使用总结】性能|电压|功耗|跑分_摘要频道_什么值得买...

外星人 Alpha ASM100-1580 游戏主机使用总结(性能|电压|功耗|跑分)在讨论性能之前&#xff0c;再最后看一看电源。NUC电源外置是必然&#xff0c;除了体积之外&#xff0c;还要考虑散热&#xff0c;所以&#xff0c;电源外置至少在目前来看还是最优解。这款电源是台达电子代工的…

openfire消息通知推送_微信小游戏内测「订阅消息」能力,这是召回用户的「大杀器」吗?...

作者&#xff1a;蒋鸿昌本文来源于「知晓程序」公众号。知晓云后端云服务&#xff0c;让你的小程序开发快人一步&#xff0c;添加「minsupport3」了解详情。知晓云​cloud.minapp.com一位投资人曾把最近 3 年微信公开课 Pro 版上张小龙的演讲称为「小程序 3 篇」&#xff1a;如…

api 数据gzip压缩_如何使用GZip和Jersey压缩Java REST API中的响应

api 数据gzip压缩在某些情况下&#xff0c;您的REST api会提供非常长的响应&#xff0c;我们都知道移动设备/网络上的传输速度和带宽仍然非常重要。 我认为这是开发支持移动应用程序的REST api时需要解决的第一个性能优化点。 你猜怎么了&#xff1f; 因为响应是文本&#xff0…

c语言心形告白代码实现

1.彩色告白includeincludeincludeincludedefine U 0.1define V 0.053void SetColor(unsigned short ForeColor,unsigned short BackGroundColor){HANDLE hConGetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor)|(BackGroundColor16));}int main(){int …

obs可以推到中转服务器吗,能否使用OBS(Open Broadcaster Software)、FMLE(Flash Media Live Encoder)等第三方软件进行推流?...

"可以。请参考以下方法进行设置。使用OBS进行直播设置 > 串流 > 串流类型&#xff1a;自定义流媒体服务器URL&#xff1a;填写网易服务器提供的推流地址中&#xff0c;从头到live的部分&#xff0c;例如&#xff1a;rtmp://p12345678.live.126.net/live流密钥&#…

mysql 隐藏中间四位_MySQL知识体系——索引

本文直切主题&#xff0c;针对InnoDB引擎描述索引及优化策略。在开始之前&#xff0c;需要读者了解&#xff1a;二叉查找树(包括2-3查找树、红黑树等数据结构)MySQL的InnoDB引擎基础知识索引初探要了解索引&#xff0c;当然要了解其数据结构。树有很多应用&#xff0c;流行的用…

python中属于私有属性的是_Python中的实例属性和私有属性

相关知识点 实例属性 实例属性和类属性的区别在于实例属性定义在类的__init__()魔法方法中&#xff0c;而类属性定义在类下&#xff1a; 1 classC:2 b 1 #类属性 3 4 def __init__(self):5 self.x None #实例属性 对于类属性这里不做说明&#xff0c;主要描述实例属性&#x…

osgi cxf_所有OSGi套件的通用CXF请求拦截器

osgi cxf几个月以来&#xff0c;我一直在研究Apache CXF&#xff0c;Karaf和Felix&#xff0c;我发现所有这些捆绑技术都非常有趣。 在处理一些用例时&#xff0c;我陷入一种情况&#xff0c;即我只需要一个Interceptor即可在发送到Karaf应用程序下部署的任何捆绑包的每个HTTP请…

听说,高手都用记事本写C语言代码?

坊间传闻高手都喜欢用记事本写代码&#xff0c;那么问题来了&#xff0c;我们以C语言为例&#xff0c;如何用记事本编译运行呢&#xff1f;其实&#xff0c;最简单的方式就是安装GCC编译器&#xff0c;在记事本编写C语言程序&#xff0c;然后再在命令行用GCC编译运行。下面&…

精简指令和复杂指令计算机,CPU精简指令集和复杂指令集的区别

经常看到计算机课程上介绍PowerPC是采用精简指令集的CPU&#xff0c;酷睿CPU是复杂指令集。那么到底精简指令集和复杂指令集有什么区别呢&#xff1f;以下内容摘自百度百科&#xff1a;在计算机指令系统的优化发展过程中&#xff0c;出现过两个截然不同的优化方向&#xff1a;C…