在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

Java 8 Friday Goodies:Lambda和XML相关推荐

  1. q7goodies事例_Java 8 Friday Goodies:Lambda和XML

    q7goodies事例 在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们 ...

  2. Java 8 Friday Goodies:Lambda和排序

    在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们已经写了一些关于Java ...

  3. Java 8 Friday Goodies:Lambda和SQL

    在 Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢 jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们已经 写了一些关于J ...

  4. Java 8 Friday Goodies:新的新I / O API

    在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们已经写了一些关于Java ...

  5. Java 8 Friday Goodies:java.io终于成功了!

    在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们已经写了一些关于Java ...

  6. Java 8 Friday Goodies:SQL ResultSet流

    在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们已经写了一些关于Java ...

  7. Java 8 Friday Goodies:本地交易范围

    在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们已经写了一些关于Java ...

  8. Java 8 Friday Goodies:轻松派本地缓存

    在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们已经写了一些关于Java ...

  9. java 拉姆表达式_Java8 lambda表达式10个示例

    Java 8 lambda表达式示例 转自importNew 原文链接 例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现R ...

最新文章

  1. 标准库函数、系统调用的区别
  2. Linux下基于C/C++的Socket编程基础
  3. 将时间格式的字符串转换成日期类型浏览器兼容解决方案
  4. mysql为什么选innodb_为什么现在的MySQL都要使用innoDB引擎-Go语言中文社区
  5. 自己动手写CPU之第五阶段(1)——流水线数据相关问题
  6. 30 张快速学习 Java 的思维导图
  7. 合成孔径雷达(微波遥感)的应用
  8. matlab fft函数画幅度谱,如何在FFT幅度谱上绘制掩模线
  9. torch.optim 中的优化器
  10. 5G移动通信发展历程
  11. 基于冷冻电镜图像的低通滤波(Lowpass Filter)算法
  12. springboot Nexus Repository Maven仓库搭建及使用
  13. 路由器使用Caddy搭建Webdav服务
  14. Qt程序移植到ARM
  15. java 线程耗尽_关于线程耗尽导致请求超时系统假死的思考
  16. 浏览器f12, ::before ::after是什么意思?
  17. 第六章贪心(三):排序不等式、绝对值不等式
  18. Revi插件技巧:管道【风口下延】自定义长度?
  19. 宏碁收购Gateway 12天上演变脸大戏
  20. 我收集的小程序干货汇总-前后台都有,不用谢!

热门文章

  1. Android碎片Fragment详讲(1)
  2. spingmvc 通过xml配置redis jedispol 有密码 通过xml配置redis中的 jedispool(有密码)
  3. 机器学习和统计里面的auc怎么理解?
  4. 我的控制反转,依赖注入和面向切面编程的理解
  5. tomcat(14)服务器组件和服务组件
  6. java.rmi.UnmarshalException:errorunmarshalling return; java.lang.ClassNotFoundException的解决方法
  7. SpringBoot整合Shiro权限框架
  8. jvm 助记符_您的JVM是否泄漏文件描述符-像我的一样?
  9. apache spark_Apache Spark软件包,从XML到JSON
  10. functor_纯Java中的Functor和Monad示例