提交 4c1717c4 编写于 作者: W wizardforcel

2020-06-10 22:02:12

上级 fb06b956
......@@ -34,7 +34,7 @@ Robert C. Martin 在他的书《 *敏捷软件开发:原理,模式和实践
我们可以使用 [TDD](https://en.wikipedia.org/wiki/Test-driven_development) 方法来解决代码中的这些问题。 修正错误后,您必须确保没有其他测试会因副作用而失败。
* Another permissive exception is that any change to existing code is allowed as long as it does not also require a change to any client of that code. This allows the upgrade of the module versions with new language features. For example, [Spring 5](https://howtodoinjava.com/spring-5-tutorial/) supports and uses [Java 8 lambda](https://howtodoinjava.com/java-8-tutorial/) syntax but to use it, we do not require to change our client application code.
* Another permissive exception is that any change to existing code is allowed as long as it does not also require a change to any client of that code. This allows the upgrade of the module versions with new language features. For example, [Spring 5](https://howtodoinjava.com/spring-5-tutorial/) supports and uses [Java8 lambda](https://howtodoinjava.com/java-8-tutorial/) syntax but to use it, we do not require to change our client application code.
一个模块,其中的类是松散耦合的,在不强迫其他类更改的情况下更改了类,这就是鼓励松散耦合的原因。 如果您允许对现有代码进行修改而不会强制对客户端进行进一步更改,则保持松散的耦合将限制 OCP 的影响。
......
......@@ -74,4 +74,4 @@
学习愉快!
> 参考:本文引用并使用了一些示例,例如 *Andy Hunt 的[“使用 JUnit 进行 Java 8 中的实用单元测试”](https://pragprog.com/book/utj2/pragmatic-unit-testing-in-java-8-with-junit) 中给出的示例; 杰夫·兰格 戴夫·托马斯*。
\ No newline at end of file
> 参考:本文引用并使用了一些示例,例如 *Andy Hunt 的[“使用 JUnit 进行 Java8 中的实用单元测试”](https://pragprog.com/book/utj2/pragmatic-unit-testing-in-java-8-with-junit) 中给出的示例; 杰夫·兰格 戴夫·托马斯*。
\ No newline at end of file
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/library/rxjava-tutorial/](https://howtodoinjava.com/library/rxjava-tutorial/)
[RxJava 2.0](http://reactivex.io/) 是 Java 的开源扩展,用于 NetFlix 的异步编程。 如 [java 8 lambda 表达式](//howtodoinjava.com/java8/complete-lambda-expressions-tutorial-in-java/)中所示,它与函数式编程更加接近。 反应代码的基本构建块是*可观察对象**订阅者*`Observable`发出项目; `Subscriber`消耗这些项目。
[RxJava 2.0](http://reactivex.io/) 是 Java 的开源扩展,用于 NetFlix 的异步编程。 如 [Java8 lambda 表达式](//howtodoinjava.com/java8/complete-lambda-expressions-tutorial-in-java/)中所示,它与函数式编程更加接近。 反应代码的基本构建块是*可观察对象**订阅者*`Observable`发出项目; `Subscriber`消耗这些项目。
RxJava 看起来也像[观察者设计模式](https://howtodoinjava.com/design-patterns/behavioral/observer-design-pattern/),但有所不同 – 可观察对象通常不会开始发布项目,除非有人明确订阅它们。
......
......@@ -33,9 +33,9 @@ public static long factorialRecursive( long n )
```
## 3)使用流计算阶乘[Java 8]
## 3)使用流计算阶乘[Java8]
Java 8 支持流,您可以使用流以最有效的方式计算阶乘,如下所示。
Java8 支持流,您可以使用流以最有效的方式计算阶乘,如下所示。
```java
public static long factorialStreams( long n )
......
......@@ -8,9 +8,9 @@
让我们学习编写一个程序来用 Java 模拟这个游戏。
## 在 Java 8 中解决 FizzBu​​zz
## 在 Java8 中解决 FizzBu​​zz
使用最新的 Java 版本 8,让我们使用 Java 8 构造设计解决方案。
使用最新的 Java 版本 8,让我们使用 Java8 构造设计解决方案。
```java
IntStream.rangeClosed(1, 100)
......@@ -19,9 +19,9 @@ IntStream.rangeClosed(1, 100)
```
## 在 Java 8 之前解决 FizzBu​​zz
## 在 Java8 之前解决 FizzBu​​zz
如果您仍未使用 Java 8,则此 Fizzbuzz 解决方案将使用基本的 for 循环并遍历数字范围并确定要打印的内容。
如果您仍未使用 Java8,则此 Fizzbuzz 解决方案将使用基本的 for 循环并遍历数字范围并确定要打印的内容。
```java
for (int i = 1; i <= num; i++)
......
......@@ -45,9 +45,9 @@ Output:
```
## 查找电话号码的解决方案 – Java 8
## 查找电话号码的解决方案 – Java8
上面的代码虽然很简单,但是可以使用新语言功能(例如 [Java 8](https://howtodoinjava.com/java-8-tutorial/) 中的 [lambda](https://howtodoinjava.com/java8/complete-lambda-expressions-tutorial-in-java/) )减少许多行。 让我们看看如何?
上面的代码虽然很简单,但是可以使用新语言功能(例如 [Java8](https://howtodoinjava.com/java-8-tutorial/) 中的 [lambda](https://howtodoinjava.com/java8/complete-lambda-expressions-tutorial-in-java/) )减少许多行。 让我们看看如何?
```java
import java.util.Arrays;
......
......@@ -92,9 +92,9 @@ HashMap 不是线程安全的。 我们可以在并发应用中使用 **HashTabl
#### 1.10 [接口和抽象类之间的区别?](//howtodoinjava.com/object-oriented/exploring-interfaces-and-abstract-classes-in-java/ "Exploring interfaces and abstract classes in java")
自从 Java 语言诞生以来,在**抽象类****接口**中就有非常清晰的分离。 但是自从 Java 8 发行到市场以来,发生了很多变化。 它的核心概念之一是功能接口。
自从 Java 语言诞生以来,在**抽象类****接口**中就有非常清晰的分离。 但是自从 Java8 发行到市场以来,发生了很多变化。 它的核心概念之一是功能接口。
[**功能接口**](https://howtodoinjava.com/java8/functional-interface-tutorial/) 完全改变了我们查看 Java 语言的两个基本构建块的方式。 如果您的简历说您使用 Java 8,就不能跳过这个问题。在链接的教程中,我将向您展示正确的场景,这将帮助您解决一些复杂的面试问题和案例研究。
[**功能接口**](https://howtodoinjava.com/java8/functional-interface-tutorial/) 完全改变了我们查看 Java 语言的两个基本构建块的方式。 如果您的简历说您使用 Java8,就不能跳过这个问题。在链接的教程中,我将向您展示正确的场景,这将帮助您解决一些复杂的面试问题和案例研究。
#### 1.11 [枚举面试问题](//howtodoinjava.com/java-5/guide-for-understanding-enum-in-java/)
......@@ -196,7 +196,7 @@ Java 中的对象**克隆**并非易事。 我自己花了很长时间了解 Jav
#### 2.5 [什么是 Fork / Join 框架?](https://howtodoinjava.com/java7/forkjoin-framework-tutorial-forkjoinpool-example/)
自 Java 8 发行以来,这不是一个新概念,但现在已以多种方式使用。Fork-Join 将手头的任务分解为多个微型任务,直到该微型任务足够简单,无需进一步分解即可解决。 这就像分而治之的算法。 在此框架中要注意的一个重要概念是,理想情况下,没有工作线程处于空闲状态。 他们实现了一种偷窃工作的算法,即闲置的工人从忙碌的工人那里窃取了工作。
自 Java8 发行以来,这不是一个新概念,但现在已以多种方式使用。Fork-Join 将手头的任务分解为多个微型任务,直到该微型任务足够简单,无需进一步分解即可解决。 这就像分而治之的算法。 在此框架中要注意的一个重要概念是,理想情况下,没有工作线程处于空闲状态。 他们实现了一种偷窃工作的算法,即闲置的工人从忙碌的工人那里窃取了工作。
学习这个精巧而高效的算法,以更好地准备下一次面试。
......
......@@ -156,7 +156,7 @@ final int hash;
* 默认情况下,Java 接口的成员是公共的。 Java 抽象类可以具有类成员通常的风格,例如`private``abstract`等。
* Java 接口应使用关键字“ **实现**”实现; Java 抽象类应使用关键字“ **extended** ”来扩展。
* Java 类可以实现多个接口,但只能扩展一个抽象类。
* 接口是~~的绝对抽象,~~不能实例化; Java 抽象类也无法实例化,但是可以在存在 main()的情况下调用。 从 Java 8 开始,您可以在接口 中定义 [**默认方法。**](//howtodoinjava.com/java8/default-methods-in-java-8/)
* 接口是~~的绝对抽象,~~不能实例化; Java 抽象类也无法实例化,但是可以在存在 main()的情况下调用。 从 Java8 开始,您可以在接口 中定义 [**默认方法。**](//howtodoinjava.com/java8/default-methods-in-java-8/)
* 抽象类比接口要快一些,因为接口涉及在 Java 中调用任何重写方法之前进行的搜索。 在大多数情况下,这并不是显着的差异,但是如果您正在编写时间紧迫的应用,那么您可能不想无所事事。
## **何时覆盖 hashCode()和 equals()?**
......
......@@ -102,7 +102,7 @@ Wrapping data and methods within classes in combination with implementation hidi
接口和抽象类之间的基本区别可以算作如下:
* ~~接口不能有任何方法,而抽象类可以~~ [在 [java 8 默认方法](//howtodoinjava.com/java8/default-methods-in-java-8/)之后不正确)
* ~~接口不能有任何方法,而抽象类可以~~ [在 [Java8 默认方法](//howtodoinjava.com/java8/default-methods-in-java-8/)之后不正确)
* 一个类可以实现许多接口,但只能有一个超类(是否抽象)
* 接口不属于类层次结构。 不相关的类可以实现相同的接口
......
......@@ -69,7 +69,7 @@ Java 9 中的一些重要功能/ [更改是:](https://howtodoinjava.com/java9/
请在此处查看更新的发行信息[](https://openjdk.java.net/projects/jdk9/)
## Java 8 功能
## Java8 功能
**发行日期**`March 18, 2014`
......
......@@ -429,7 +429,7 @@ Test is test comment
```
希望本 xpath 教程对您有所帮助。 它将帮助您使用 Java 执行 **xpath**。 字符串的 **Java xpath 示例**也将在 **Java 8** 中成功运行。
希望本 xpath 教程对您有所帮助。 它将帮助您使用 Java 执行 **xpath**。 字符串的 **Java xpath 示例**也将在 **Java8** 中成功运行。
如果您有任何建议,请发表评论。
......
# Java 8 xpath 示例 – 在字符串上求值 xpath
# Java8 xpath 示例 – 在字符串上求值 xpath
> 原文: [https://howtodoinjava.com/xml/evaluate-xpath-on-xml-string/](https://howtodoinjava.com/xml/evaluate-xpath-on-xml-string/)
......@@ -147,6 +147,8 @@ Lokesh
阅读更多:
[文件](https://howtodoinjava.com/xml/evaluate-xpath-on-dom/)中的 Java xpath 示例
[文件中的 Java xpath 示例](https://howtodoinjava.com/xml/evaluate-xpath-on-dom/)
[Java xpath 教程](https://howtodoinjava.com/xml/how-to-work-with-xpaths-in-java-with-examples/)
[如何在 Java 中使用 xpath 获取 xml 中的属性值](https://howtodoinjava.com/xml/xpath-attribute-evaluate/)
\ No newline at end of file
......@@ -102,18 +102,19 @@
现在来看几个有关如何构建 xpath 以便基于字段和属性的各种条件获取信息的示例。
| 描述 | XPath | 结果 |
| 获取所有员工姓名 | `/employees/employee/firstName/text()` | [Lokesh,Brian,Alex,Amit,David,Virat,John,Mike,Bob,Gary] |
| 获取所有部门名称 | `/employees/employee/department/name/text()` | [IT,HR,财务,HR,DEVOPS,DEVOPS,IT,HR,财务,IT] |
| 让所有 IT 员工 | `/employees/employee[department/name='IT']/firstName/text()` | [洛克希,约翰,加里] |
| 按编号获取员工 | `/employees/employee[@id=4]/firstName/text()` | [什么] |
| 取得 ID 大于 6 的员工 | `/employees/employee[@id>6]/firstName/text()` | [约翰,迈克,鲍勃,加里] |
| 找大卫的部门 | `/employees/employee[firstName = 'David']/department/name/text()` | [DEVOPS] |
| 获取所有员工 ID | `/employees/employee/@id` | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
| 获取人力资源部门的所有员工 ID | `/employees/employee[department/name='HR']/@id` | [2, 4, 8] |
| 获取员工编号“ Alex” | `/employees/employee[firstName='Alex']/@id` | [3] |
| 获取大于 5 的员工 ID | `/employees/employee/@id[. > 5]` | [6, 7, 8, 9, 10] |
| 获取其 ID 包含“ 1”的员工 | `/employees/employee[contains(@id,'1')]/firstName/text()` | [Lokesh,加里] |
| 获取其 ID 包含 1 的员工 | `descendant-or-self::*[contains(@id,'1')]/firstName/text()` | [Lokesh, Gary] |
| --- | --- | --- |
| 获取所有员工姓名 | `/employees/employee/firstName/text()` | `[Lokesh, Brian, Alex, Amit, David, Virat, John, Mike, Bob, Gary]` |
| 获取所有部门名称 | `/employees/employee/department/name/text()` | `[IT, HR, FINANCE, HR, DEVOPS, DEVOPS, IT, HR, FINANCE, IT]` |
| 获取所有 IT 员工 | `/employees/employee[department/name='IT']/firstName/text()` | `[Lokesh, John, Gary]` |
| 按编号获取员工 | `/employees/employee[@id=4]/firstName/text()` | ` [Amit]` |
| 取得 ID 大于 6 的员工 | `/employees/employee[@id>6]/firstName/text()` | `[John, Mike, Bob, Gary]` |
| 获取大卫的部门 | `/employees/employee[firstName = 'David']/department/name/text()` | `[DEVOPS]` |
| 获取所有员工 ID | `/employees/employee/@id` | ` [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` |
| 获取人力资源部门的所有员工 ID | `/employees/employee[department/name='HR']/@id` | ` [2, 4, 8]` |
| 获取员工“`Alex`”编号 | `/employees/employee[firstName='Alex']/@id` | `[3]` |
| 获取大于 5 的员工 ID | `/employees/employee/@id[. > 5]` | `[6, 7, 8, 9, 10]` |
| 获取其 ID 包含“1”的员工 | `/employees/employee[contains(@id,'1')]/firstName/text()` | `[Lokesh, Gary]` |
| 获取其 ID 包含 1 的员工 | `descendant-or-self::*[contains(@id,'1')]/firstName/text()` | `[Lokesh, Gary]` |
## 2.求值 xpath 表达式的 Java 示例
......@@ -328,7 +329,10 @@ public class Department implements Serializable {
参考文献:
[XPathFactory Java 文件](https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPathFactory.html)
[`XPathFactory` Java 文件](https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPathFactory.html)
[XPath Java 文件](https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPath.html)
[XPathExpression Java 文件](https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPathExpression.html)
[org.w3c.dom.Document Java 文件](https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Document.html)
\ No newline at end of file
# Java XPath NamespaceContext – 名称空间解析示例
# Java XPath `NamespaceContext` – 名称空间解析示例
> 原文: [https://howtodoinjava.com/xml/xpath-namespace-resolution-example/](https://howtodoinjava.com/xml/xpath-namespace-resolution-example/)
在此 Java 示例中,我们将使用 [NamespaceContext](https://docs.oracle.com/javase/7/docs/api/javax/xml/namespace/NamespaceContext.html) 将 XPath 名称空间解析学习为 XML 文件,该文件具有名称空间声明和各自的用法。
在此 Java 示例中,我们将使用[`NamespaceContext`](https://docs.oracle.com/javase/7/docs/api/javax/xml/namespace/NamespaceContext.html)将 XPath 名称空间解析学习为 XML 文件,该文件具有名称空间声明和各自的用法。
## 命名空间添加了 XML 文件
......@@ -20,7 +20,7 @@
```
## 实现 NamespaceContext 以创建名称空间解析器
## 实现`NamespaceContext`以创建名称空间解析器
该名称空间解析器可以与使用了名称空间定义的任何 XML 文件一起使用。 它搜索 XML 文档本身内任何给定名称空间前缀(作为参数传递)的名称空间声明。 因此**无需单独创建名称空间映射**
......@@ -55,7 +55,7 @@ public class NamespaceResolver implements NamespaceContext
```
## 使用 NamespaceResolver 并应用 XPath
## 使用`NamespaceResolver`并应用 XPath
现在,我们准备在 XML 文件上应用 xpath 表达式。
......
......@@ -4,11 +4,11 @@
很多时候,我们需要解析 XML 文件并从中提取信息。 例如,**使用 xpath** 读取 XML 元素的属性值。 在此 Java XPath 教程中,学习从 XML 字符串获取属性值。
我正在使用 [**jdom**](https://mvnrepository.com/artifact/org.jdom "jdom jar")[**jaxen**](http://www.java2s.com/Code/Jar/j/Downloadjaxen111jar.htm "jaxen jar") 。 这些也是可用的其他大量开源 API,但是想法保持不变。
我正在使用 [**jdom**](https://mvnrepository.com/artifact/org.jdom "jdom jar")[**jaxen**](http://www.java2s.com/Code/Jar/j/Downloadjaxen111jar.htm "jaxen jar")。 这些也是可用的其他大量开源 API,但是想法保持不变。
## Java 程序使用 XPath 从 Java 中获得
## Java 程序使用 XPath 从 Java 中获得值
在给定的 Java 程序下面,从提供的 XML 字符串创建 DOM 对象。 然后,它使用 **XPath.selectNodes()**方法应用 XPATH 表达式。
在给定的 Java 程序下面,从提供的 XML 字符串创建 DOM 对象。 然后,它使用`XPath.selectNodes()`方法应用 XPATH 表达式。
方法返回`Element`实例的列表,这些实例是求值 XPath 表达式的结果。 您可以迭代列表并使用结果。
......@@ -68,7 +68,7 @@ public class XmlAttributesUsingXPathExample
```
Please include correct class files. Invalid imports can cause in following error or something like this.
请包括正确的类文件。 无效的导入会导致以下错误或类似的错误。
```java
java.lang.ClassCastException: org.jdom.Document cannot be cast to org.w3c.dom.Node
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/xml/xpath-attribute-evaluate/](https://howtodoinjava.com/xml/xpath-attribute-evaluate/)
**的简单示例,如何使用 Java 中的 [xpath](https://howtodoinjava.com/xml/java-xpath-tutorial-example/)** 获取 xml 中的属性值。 我们将学习获取信息以匹配*属性值**属性值在*范围内, **xpath 属性 contains()**等。
如何使用 Java 中的 [xpath](https://howtodoinjava.com/xml/java-xpath-tutorial-example/) 获取 xml 中的属性值的简单示例。 我们将学习获取信息以匹配*属性值**属性值在*范围内,xpath 属性`contains()`等。
## 1\. XPath 属性表达式
......@@ -102,12 +102,13 @@
现在来看几个有关如何构建 xpath 以便基于属性获取信息的示例。
| 描述 | XPath | 结果 |
| 获取所有员工 ID | `/employees/employee/@id` | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
| 获取人力资源部门的所有员工 ID | `/employees/employee[department/name='HR']/@id` | [2, 4, 8] |
| 获取员工编号“ Alex” | `/employees/employee[firstName='Alex']/@id` | [3] |
| 获取大于 5 的员工 ID | `/employees/employee/@id[. > 5]` | [6, 7, 8, 9, 10] |
| 获取其 ID 包含“ 1”的员工 | `/employees/employee[contains(@id,'1')]/firstName/text()` | [Lokesh,加里] |
| 获取其 ID 包含 1 的员工 | `descendant-or-self::*[contains(@id,'1')]/firstName/text()` | [Lokesh, Gary] |
| --- | --- | --- |
| 获取所有员工 ID | `/employees/employee/@id` | `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` |
| 获取人力资源部门的所有员工 ID | `/employees/employee[department/name='HR']/@id` | `[2, 4, 8]` |
| 获取员工编号“ Alex” | `/employees/employee[firstName='Alex']/@id` | `[3]` |
| 获取大于 5 的员工 ID | `/employees/employee/@id[. > 5]` | `[6, 7, 8, 9, 10]` |
| 获取其 ID 包含“1”的员工 | `/employees/employee[contains(@id,'1')]/firstName/text()` | `[Lokesh, Gary]` |
| 获取其 ID 包含1 的员工 | `descendant-or-self::*[contains(@id,'1')]/firstName/text()` | `[Lokesh, Gary]` |
## 2\. Java 示例使用 xpath 查找具有属性值的 xml 元素
......@@ -328,6 +329,6 @@ public class Department implements Serializable {
```
让我问您有关如何使用 xpath 查找具有属性值的 xml 元素的问题。
向我提供有关如何使用 xpath 查找具有属性值的 xml 元素的问题。
学习愉快!
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册