Java 8 Friday Goodies:Lambda和XML

在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一个新的博客系列了……

Java 8星期五

每个星期五,我们都会向您展示一些不错的教程风格的Java 8新功能,这些功能利用了lambda表达式,扩展方法和其他好东西。 您可以在GitHub上找到源代码 。

Java 8 Goodie:Lambda和XML

Java 8对现有的SAX和DOM API所做的工作并不多。 SAX ContentHandler有太多抽象方法无法用作@FunctionalInterface ,而DOM是w3c指定的庞大,冗长的API ,几乎没有机会添加新的扩展方法。

幸运的是,有一个名为jOOX的小型开放源代码库 ,该库允许通过模仿流行jQuery库的包装器API处理w3c标准DOM API。 jQuery通过允许用户将函数传递给API进行DOM遍历,从而利用了JavaScript的语言功能。 jOOX也是如此。 让我们仔细看看:

假设我们正在使用以下pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.jooq</groupId><artifactId>java8-goodies</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.jooq</groupId><artifactId>joox</artifactId><version>1.2.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><fork>true</fork><maxmem>512m</maxmem><meminitial>256m</meminitial><encoding>UTF-8</encoding><source>1.8</source><target>1.8</target><debug>true</debug><debuglevel>lines,vars,source</debuglevel></configuration></plugin></plugins></build>
</project>

假设我们想知道Maven的groupId:artifactId:version表示法中涉及的所有工件。 我们可以使用jOOX和lambda表达式来做到这一点:

$(new File("./pom.xml")).find("groupId").each(ctx -> {System.out.println($(ctx).text() + ":" +$(ctx).siblings("artifactId").text() + ":" +$(ctx).siblings("version").text());
});

执行上述收益:

org.jooq:java8-goodies:1.0-SNAPSHOT
org.jooq:joox:1.2.0
org.apache.maven.plugins:maven-compiler-plugin:2.3.2

假设我们只想显示那些版本号中没有SNAPSHOT工件。 只需添加一个过滤器:

$(new File("./pom.xml")).find("groupId").filter(ctx -> $(ctx).siblings("version").matchText(".*-SNAPSHOT").isEmpty()).each(ctx -> {System.out.println($(ctx).text() + ":" +$(ctx).siblings("artifactId").text() + ":" +$(ctx).siblings("version").text());});

现在将产生

org.jooq:joox:1.2.0
org.apache.maven.plugins:maven-compiler-plugin:2.3.2

我们还可以转换XML内容。 例如,如果目标文档不需要是POM,则可以用包含Maven表示法中的工件名称的人工artifact元素替换匹配的groupId元素。 这样做的方法如下:

$(new File("./pom.xml")).find("groupId").filter(ctx -> $(ctx).siblings("version").matchText(".*-SNAPSHOT").isEmpty()).content(ctx ->$(ctx).text() + ":" +$(ctx).siblings("artifactId").text() + ":" +$(ctx).siblings("version").text()).rename("artifact").each(ctx -> System.out.println(ctx));

上面的代码通过.content()将新内容替换为上一个内容,然后在打印出该元素之前,将groupId元素重命名为artifact 。 结果是:

<artifact>org.jooq:joox:1.2.0</artifact>
<artifact>org.apache.maven.plugins:maven-compiler-plugin:2.3.2</artifact>

下周还会有更多好吃的东西

显而易见的是,lambda专家组选择使所有SAM(单一抽象方法接口)都可以与lambda表达式一起使用,这为预先存在的API增添了巨大价值。 相当聪明的举动。

但也有新的API。 上周,我们讨论了如何通过使用lambdas来改进现有的JDK 1.2 File API 。 我们的一些读者表达了他们对java.io API已被java.nio (在新I / O中为nio)所取代的担忧。 下周,我们将看一下Java 8的java.nnio API(用于新的I / O!)以及它与Java 8 Streams API的关系 。

参考: Java 8 Friday Goodies:来自Java,CG和JOOQ博客的JCG合作伙伴 Lukas Eder的Lambda和XML 。

翻译自: https://www.javacodegeeks.com/2014/01/java-8-friday-goodies-lambdas-and-xml.html

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

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

相关文章

洛谷2619/bzoj2654 Tree(凸优化+MST)

bzoj的数据是真的水。。 qwq 由于本人还有很多东西不是很理解 qwq 所以这里只写一个正确的做法。 首先&#xff0c;我们会发现&#xff0c;对于你选择白色边的数目&#xff0c;随着数目的上涨&#xff0c;斜率是单调升高的。 那么这时候我们就可以考虑凸优化&#xff0c;也就是…

oracle 创交表,创建交叉报表(oracle)_oracle

创建交叉报表create table t1(goodid number(10) not null,saledate date not null,salesum number(10));要求生成本年度每个月的产品销售状况表m1 m2 m3 ... m12g1g2...gn下面是生成报表的sqlSELECT goodid,SUM(decode(to_char(saledate,mm),01,salesum)) "01"…

cass方格网数据excel_讨论|CASS怎么计算回字型土方? 124

大家好,欢迎来到我的专栏。这是我原创的第124篇CASS应用技术干货文章。希望对你有所帮助&#xff0c;写文不易&#xff0c;请点赞哦!回字型土方工程&#xff0c;就是计算区域内部&#xff0c;有一个或多个不参加计算的区域&#xff0c;这种区域也就是常说的“扣岛”。常见的有基…

ATM购物车程序项目规范(更新到高级版)

ATM购物车程序&#xff08;高级版&#xff09; 之前的低级版本已经删除&#xff0c;现在的内容太多&#xff0c;没时间把内容上传&#xff0c;有时间我会把项目源码奉上&#xff01; 我已经把整个项目源码传到群文件里了&#xff0c;需要的可以加主页qq群号。同时群内也有免费的…

垃圾收集器准则和提示

这些是我需要调整GC时通常会看到的一些准则和技巧。 主要由以下两本书组成&#xff0c;而根据我的经验却很少&#xff1a; Java性能 JBoss AS 5性能调优 希望它们对那里的其他人有用&#xff01; 垃圾收集器 XX:AggressiveOpts将HotSpot内部布尔变量设置为true以启用其他性…

MD5加密处理

MD5 加密后的位数一般为两种&#xff0c;16 位与 32 位。16 位实际上是从 32 位字符串中&#xff0c;取中间的第 9 位到第 24 位的部分 using System; using System.Security.Cryptography; using System.Text;namespace _04MD5加密 {internal class Program{private static vo…

php tp 支付宝 支付,php实现的支付宝网页支付功能示例【基于TP5框架】

本文实例讲述了php实现的支付宝网页支付功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1.提交支付请求require_once ./payment/zfb/pagepay/service/AlipayTradeService.php;require_once ./payment/zfb/pagepay/buildermodel/AlipayTradePagePayContentBuilder.…

移动前端—H5实现图片先压缩再上传

在做移动端图片上传的时候&#xff0c;用户传的都是手机本地图片&#xff0c;而本地图片一般都相对比较大&#xff0c;拿iphone6来说&#xff0c;平时拍很多图片都是一两M的&#xff0c;如果直接这样上传&#xff0c;那图片就太大了&#xff0c;如果用户用的是移动流量&#xf…

requests模块

python requests用法总结 本文全部来源于官方文档 http://docs.python-requests.org/en/master/ 1、安装 Requests 是一个第三方 Python 模块&#xff0c;其官网的介绍如下&#xff1a; Requests 唯一的一个非转基因的 Python HTTP 库&#xff0c;人类可以安全享用。 警告&…

假期周总结六

放假第六周所做事情为&#xff1a; 1、在网上找了相关教程学习安装Hadoop,但过程中出现了许多问题&#xff0c;中途放弃了 2、继续观看关于大数据的在线课程视频转载于:https://www.cnblogs.com/DaisyYuanyq/p/9583194.html

linux子系统备份,使用LxRunOffline工具备份/还原Linux子系统(WSL)

安装WSL开启WSL组件首先需要打开WSL组件&#xff0c;可以使用以下命令&#xff1a;Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux也可以手动在【控制面板】-【程序】-【启用或关闭Windows功能】-【适用于Linux的Windows子系统】打勾&…

react打包后图片丢失_手搭一个 React,Typescript,Koa,GraphQL 环境

本文系原创&#xff0c;转载请附带作者信息&#xff1a;yhlben项目地址&#xff1a;https://github.com/yhlben/cdfang-spider前言在实际的开发过程中&#xff0c;从零开始初始化一个项目往往很麻烦&#xff0c;所以各种各样的脚手架工具应运而生。crea-react-app&#xff0c;v…

无需改动现有网络,企业高速远程访问内网Linux服务器

某企业为数据治理工具盒厂商&#xff0c;帮助客户摆脱数据问题困扰、轻松使用数据&#xff0c;使得客户可以把更多精力投入至数据应用及业务赋能&#xff0c;让数据充分发挥其作为生产要素的作用。 目前&#xff0c;该企业在北京、南京、西安、武汉等地均设有产研中心&#xff…

AngularJS XMLHttpRequest

$http 是 AngularJS 中的一个核心服务&#xff0c;用于读取远程服务器的数据。 读取 JSON 文件 下是存储在web服务器上的 JSON 文件&#xff1a; {"records": [{"Name": "Alfreds Futterkiste","City": "Berlin","Co…

使用Hazelcast发布和订阅

几周前&#xff0c;我写了一篇有关Hazelcast入门的博客&#xff0c;描述了创建分布式地图&#xff0c;列表和队列是多么简单。 当时我提到Hazelcast还能做很多其他事情。 该博客快速浏览了Hazelcast的另一个功能&#xff1a;基于Publish / Subscribe模式的广播消息系统。 这采用…

接口自动化测试持续集成--Soapui接口功能测试参数化

按照自动化测试分层实现的原理&#xff0c;每一层的脚本实现都要进行参数化&#xff0c;自动化的目标就是要实现脚本代码与测试数据分离。当测试数据进行调整的时候不会对脚本的实现带来震荡&#xff0c;从而提高脚本的稳定性与灵活度&#xff0c;降低脚本的维护成本。Soapui最…

linux的tcpdump命令详解,tcpdump命令

tcpdump命令是一款sniffer工具&#xff0c;它可以打印所有经过网络接口的数据包的头信息&#xff0c;也可以使用-w选项将数据包保存到文件中&#xff0c;方便以后分析。语法tcpdump(选项)选项-a&#xff1a;尝试将网络和广播地址转换成名称&#xff1b;-c&#xff1a;收到指定的…

Codeforces 1027E Inverse Coloring 【DP】

Codeforces 1027E Inverse Coloring 题目链接 1 #include<bits/stdc.h>2 using namespace std;3 #define N 10104 #define LL long long5 #define Mod 9982443536 int n,k;7 LL dp[N][N],ans0;8 LL sum[N][N];9 int main(){ 10 cin>>n>>k; 11 dp[0][…

合并远程仓库到本地_git远程仓库创建和合并

上周发了一个张佳波小朋友关于git的文章&#xff0c;马上就更多小朋友的回馈。其中周玉涛同志发来了自己对于git之前问题的一些理解和解决方法&#xff0c;希望能帮助更多人解决问题。为了保证周玉涛同学提供材料的完整性&#xff0c;以下将他原文和图片发出&#xff0c;不做其…

swfobject.js视频播放插件

在网页中经常会用到视频播放的功能&#xff0c;下面介绍一下swfobject.js的视频播放应用&#xff1a;html代码结构&#xff1a; <div id"video_content"></div> css样式结构&#xff1a; body{background: #003368}#video_content{width:600px;height:40…