commit
1b2d44a9eb
@ -38,8 +38,6 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
|
||||||
<akka.http.version>10.0.11</akka.http.version>
|
<akka.http.version>10.0.11</akka.http.version>
|
||||||
<akka.stream.version>2.5.11</akka.stream.version>
|
<akka.stream.version>2.5.11</akka.stream.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -91,8 +91,6 @@
|
|||||||
<commons-collections4.version>4.3</commons-collections4.version>
|
<commons-collections4.version>4.3</commons-collections4.version>
|
||||||
<guava.version>28.0-jre</guava.version>
|
<guava.version>28.0-jre</guava.version>
|
||||||
<retrofit.version>2.6.0</retrofit.version>
|
<retrofit.version>2.6.0</retrofit.version>
|
||||||
<jmh-core.version>1.19</jmh-core.version>
|
|
||||||
<jmh-generator.version>1.19</jmh-generator.version>
|
|
||||||
<commons.lang3.version>3.8.1</commons.lang3.version>
|
<commons.lang3.version>3.8.1</commons.lang3.version>
|
||||||
<JUnitParams.version>1.1.0</JUnitParams.version>
|
<JUnitParams.version>1.1.0</JUnitParams.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -13,22 +13,22 @@ public class KadaneAlgorithm {
|
|||||||
int start = 0;
|
int start = 0;
|
||||||
int end = 0;
|
int end = 0;
|
||||||
|
|
||||||
int maxSoFar = 0, maxEndingHere = 0;
|
int maxSoFar = arr[0], maxEndingHere = arr[0];
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
|
|
||||||
if (arr[i] > maxEndingHere + arr[i]) {
|
if (arr[i] > maxEndingHere + arr[i]) {
|
||||||
start = i;
|
start = i;
|
||||||
maxEndingHere = arr[i];
|
maxEndingHere = arr[i];
|
||||||
} else
|
} else {
|
||||||
maxEndingHere = maxEndingHere + arr[i];
|
maxEndingHere = maxEndingHere + arr[i];
|
||||||
|
}
|
||||||
|
|
||||||
if (maxSoFar < maxEndingHere) {
|
if (maxSoFar < maxEndingHere) {
|
||||||
maxSoFar = maxEndingHere;
|
maxSoFar = maxEndingHere;
|
||||||
end = i;
|
end = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
logger.info("Found Maximum Subarray between {} and {}", start, end);
|
logger.info("Found Maximum Subarray between {} and {}", Math.min(start, end), end);
|
||||||
return maxSoFar;
|
return maxSoFar;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,22 @@ class KadaneAlgorithmUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
void givenArrayWithNegativeNumberWhenMaximumSubarrayThenReturns6() {
|
void givenArrayWithNegativeNumberWhenMaximumSubarrayThenReturns6() {
|
||||||
//given
|
//given
|
||||||
int[] arr = new int[]{-3, 1, -8, 4, -1, 2, 1, -5, 5};
|
int[] arr = new int[] { -3, 1, -8, 4, -1, 2, 1, -5, 5 };
|
||||||
//when
|
//when
|
||||||
KadaneAlgorithm algorithm = new KadaneAlgorithm();
|
KadaneAlgorithm algorithm = new KadaneAlgorithm();
|
||||||
int maxSum = algorithm.maxSubArraySum(arr);
|
int maxSum = algorithm.maxSubArraySum(arr);
|
||||||
//then
|
//then
|
||||||
assertEquals(6, maxSum);
|
assertEquals(6, maxSum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenArrayWithAllNegativeNumbersWhenMaximumSubarrayThenReturnsExpectedResult() {
|
||||||
|
//given
|
||||||
|
int[] arr = new int[] { -8, -7, -5, -4, -3, -1, -2 };
|
||||||
|
//when
|
||||||
|
KadaneAlgorithm algorithm = new KadaneAlgorithm();
|
||||||
|
int maxSum = algorithm.maxSubArraySum(arr);
|
||||||
|
//then
|
||||||
|
assertEquals(-1, maxSum);
|
||||||
|
}
|
||||||
}
|
}
|
@ -13,7 +13,7 @@ import java.util.Objects;
|
|||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
public class AvroSerealizerDeSerealizerUnitTest {
|
public class AvroSerealizerDeSerealizerIntegrationTest {
|
||||||
|
|
||||||
AvroSerealizer serealizer;
|
AvroSerealizer serealizer;
|
||||||
AvroDeSerealizer deSerealizer;
|
AvroDeSerealizer deSerealizer;
|
@ -17,7 +17,7 @@ import okhttp3.Request;
|
|||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
|
|
||||||
@RunWith(MonoMeecrowave.Runner.class)
|
@RunWith(MonoMeecrowave.Runner.class)
|
||||||
public class ArticleEndpointsUnitTest {
|
public class ArticleEndpointsIntegrationTest {
|
||||||
|
|
||||||
@ConfigurationInject
|
@ConfigurationInject
|
||||||
private Meecrowave.Builder config;
|
private Meecrowave.Builder config;
|
@ -11,3 +11,4 @@ This module contains articles about Apache POI
|
|||||||
- [Get String Value of Excel Cell with Apache POI](https://www.baeldung.com/java-apache-poi-cell-string-value)
|
- [Get String Value of Excel Cell with Apache POI](https://www.baeldung.com/java-apache-poi-cell-string-value)
|
||||||
- [Read Excel Cell Value Rather Than Formula With Apache POI](https://www.baeldung.com/apache-poi-read-cell-value-formula)
|
- [Read Excel Cell Value Rather Than Formula With Apache POI](https://www.baeldung.com/apache-poi-read-cell-value-formula)
|
||||||
- [Setting Formulas in Excel with Apache POI](https://www.baeldung.com/java-apache-poi-set-formulas)
|
- [Setting Formulas in Excel with Apache POI](https://www.baeldung.com/java-apache-poi-set-formulas)
|
||||||
|
- [Insert a Row in Excel Using Apache POI](https://www.baeldung.com/apache-poi-insert-excel-row)
|
||||||
|
@ -100,7 +100,6 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<java.version>1.8</java.version>
|
|
||||||
<spring.version>2.2.1.RELEASE</spring.version>
|
<spring.version>2.2.1.RELEASE</spring.version>
|
||||||
<awssdk.version>2.10.27</awssdk.version>
|
<awssdk.version>2.10.27</awssdk.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -115,7 +115,6 @@
|
|||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>${surefire.plugin.version}</version>
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<useFile>false</useFile>
|
<useFile>false</useFile>
|
||||||
<includes>
|
<includes>
|
||||||
@ -186,7 +185,6 @@
|
|||||||
<logback.version>1.2.3</logback.version>
|
<logback.version>1.2.3</logback.version>
|
||||||
<groovy.version>2.5.7</groovy.version>
|
<groovy.version>2.5.7</groovy.version>
|
||||||
<assembly.plugin.version>3.1.0</assembly.plugin.version>
|
<assembly.plugin.version>3.1.0</assembly.plugin.version>
|
||||||
<surefire.plugin.version>2.20.1</surefire.plugin.version>
|
|
||||||
<compiler.plugin.version>3.8.0</compiler.plugin.version>
|
<compiler.plugin.version>3.8.0</compiler.plugin.version>
|
||||||
<groovy.compiler.version>3.3.0-01</groovy.compiler.version>
|
<groovy.compiler.version>3.3.0-01</groovy.compiler.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -101,7 +101,6 @@
|
|||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>${surefire.plugin.version}</version>
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<useFile>false</useFile>
|
<useFile>false</useFile>
|
||||||
<includes>
|
<includes>
|
||||||
@ -128,7 +127,6 @@
|
|||||||
<hsqldb.version>2.4.0</hsqldb.version>
|
<hsqldb.version>2.4.0</hsqldb.version>
|
||||||
<spock-core.version>1.1-groovy-2.4</spock-core.version>
|
<spock-core.version>1.1-groovy-2.4</spock-core.version>
|
||||||
<gmavenplus-plugin.version>1.6</gmavenplus-plugin.version>
|
<gmavenplus-plugin.version>1.6</gmavenplus-plugin.version>
|
||||||
<surefire.plugin.version>2.20.1</surefire.plugin.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -11,3 +11,4 @@ This module contains articles about Java 10 core features
|
|||||||
- [Copying Sets in Java](https://www.baeldung.com/java-copy-sets)
|
- [Copying Sets in Java](https://www.baeldung.com/java-copy-sets)
|
||||||
- [Converting between a List and a Set in Java](https://www.baeldung.com/convert-list-to-set-and-set-to-list)
|
- [Converting between a List and a Set in Java](https://www.baeldung.com/convert-list-to-set-and-set-to-list)
|
||||||
- [Java IndexOutOfBoundsException “Source Does Not Fit in Dest”](https://www.baeldung.com/java-indexoutofboundsexception)
|
- [Java IndexOutOfBoundsException “Source Does Not Fit in Dest”](https://www.baeldung.com/java-indexoutofboundsexception)
|
||||||
|
- [Collect a Java Stream to an Immutable Collection](https://www.baeldung.com/java-stream-immutable-collection)
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.baeldung.java10.streams;
|
||||||
|
|
||||||
|
import static java.util.stream.Collectors.toUnmodifiableList;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class StreamToImmutableJava10UnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUsingCollectorsToUnmodifiableList_thenSuccess() {
|
||||||
|
List<String> givenList = Arrays.asList("a", "b", "c");
|
||||||
|
List<String> result = givenList.stream()
|
||||||
|
.collect(toUnmodifiableList());
|
||||||
|
|
||||||
|
System.out.println(result.getClass());
|
||||||
|
}
|
||||||
|
}
|
@ -32,12 +32,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -105,7 +105,6 @@
|
|||||||
<guava.version>27.1-jre</guava.version>
|
<guava.version>27.1-jre</guava.version>
|
||||||
<assertj.version>3.11.1</assertj.version>
|
<assertj.version>3.11.1</assertj.version>
|
||||||
<uberjar.name>benchmarks</uberjar.name>
|
<uberjar.name>benchmarks</uberjar.name>
|
||||||
<jmh.version>1.22</jmh.version>
|
|
||||||
<eclipse.collections.version>10.0.0</eclipse.collections.version>
|
<eclipse.collections.version>10.0.0</eclipse.collections.version>
|
||||||
<shade.plugin.version>3.2.4</shade.plugin.version>
|
<shade.plugin.version>3.2.4</shade.plugin.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -17,16 +17,18 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>3.19.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<jmh.version>1.19</jmh.version>
|
|
||||||
</properties>
|
|
||||||
</project>
|
</project>
|
@ -2,7 +2,6 @@ package com.baeldung.genericarrays;
|
|||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
package com.baeldung.genericarrays;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.IntFunction;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static java.util.Collections.singletonList;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
|
public class StreamToArrayUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAStream_thenCanGetArrayOfObject() {
|
||||||
|
Object[] strings = Stream.of("A", "AAA", "B", "AAB", "C")
|
||||||
|
.filter(string -> string.startsWith("A"))
|
||||||
|
.toArray();
|
||||||
|
|
||||||
|
assertThat(strings).containsExactly("A", "AAA", "AAB");
|
||||||
|
assertThat(strings).isNotInstanceOf(String[].class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAStream_thenCanGetArrayOfString() {
|
||||||
|
String[] strings = Stream.of("A", "AAA", "B", "AAB", "C")
|
||||||
|
.filter(string -> string.startsWith("A"))
|
||||||
|
.toArray(String[]::new);
|
||||||
|
|
||||||
|
assertThat(strings).containsExactly("A", "AAA", "AAB");
|
||||||
|
assertThat(strings).isInstanceOf(String[].class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Test
|
||||||
|
public void givenAStream_whenConvertToOptional_thenCanGetArrayOfOptional() {
|
||||||
|
Stream<Optional<String>> stream = Stream.of("A", "AAA", "B", "AAB", "C")
|
||||||
|
.filter(string -> string.startsWith("A"))
|
||||||
|
.map(Optional::of);
|
||||||
|
Optional<String>[] strings = stream
|
||||||
|
.toArray(Optional[]::new);
|
||||||
|
|
||||||
|
assertThat(strings).containsExactly(Optional.of("A"),
|
||||||
|
Optional.of("AAA"),
|
||||||
|
Optional.of("AAB"));
|
||||||
|
assertThat(strings).isInstanceOf(Optional[].class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAStream_whenConvertToOptional_thenCanGetArrayOfOptionalWithHelper() {
|
||||||
|
Optional<String>[] strings = Stream.of("A", "AAA", "B", "AAB", "C")
|
||||||
|
.filter(string -> string.startsWith("A"))
|
||||||
|
.map(Optional::of)
|
||||||
|
.toArray(genericArray(Optional[]::new));
|
||||||
|
|
||||||
|
assertThat(strings).containsExactly(Optional.of("A"),
|
||||||
|
Optional.of("AAA"),
|
||||||
|
Optional.of("AAB"));
|
||||||
|
assertThat(strings).isInstanceOf(Optional[].class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenInvalidUseOfGenericArray_thenIllegalCast() {
|
||||||
|
assertThatThrownBy(() -> {
|
||||||
|
ArrayList<String>[] lists = Stream.of(singletonList("A"))
|
||||||
|
.toArray(genericArray(List[]::new));
|
||||||
|
}).isInstanceOf(ClassCastException.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private static <T, R extends T> IntFunction<R[]> genericArray(IntFunction<T[]> arrayCreator) {
|
||||||
|
return size -> (R[])arrayCreator.apply(size);
|
||||||
|
}
|
||||||
|
}
|
@ -24,12 +24,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -68,7 +68,6 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<shade.plugin.version>3.2.0</shade.plugin.version>
|
<shade.plugin.version>3.2.0</shade.plugin.version>
|
||||||
<jmh.version>1.19</jmh.version>
|
|
||||||
<assertj-core.version>3.10.0</assertj-core.version>
|
<assertj-core.version>3.10.0</assertj-core.version>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
@ -31,12 +31,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Testing -->
|
<!-- Testing -->
|
||||||
@ -77,7 +77,6 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<shade.plugin.version>3.2.0</shade.plugin.version>
|
<shade.plugin.version>3.2.0</shade.plugin.version>
|
||||||
<guava.version>28.2-jre</guava.version>
|
<guava.version>28.2-jre</guava.version>
|
||||||
<jmh.version>1.19</jmh.version>
|
|
||||||
<assertj-core.version>3.10.0</assertj-core.version>
|
<assertj-core.version>3.10.0</assertj-core.version>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
@ -25,17 +25,16 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${openjdk.jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${openjdk.jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<openjdk.jmh.version>1.19</openjdk.jmh.version>
|
|
||||||
<assertj.version>3.11.1</assertj.version>
|
<assertj.version>3.11.1</assertj.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${openjdk.jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.assertj</groupId>
|
<groupId>org.assertj</groupId>
|
||||||
@ -40,7 +40,6 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<openjdk.jmh.version>1.19</openjdk.jmh.version>
|
|
||||||
<assertj.version>3.11.1</assertj.version>
|
<assertj.version>3.11.1</assertj.version>
|
||||||
<jol-core.version>0.10</jol-core.version>
|
<jol-core.version>0.10</jol-core.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -5,3 +5,4 @@
|
|||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [ArrayList vs. LinkedList vs. HashMap in Java](https://www.baeldung.com/java-arraylist-vs-linkedlist-vs-hashmap)
|
- [ArrayList vs. LinkedList vs. HashMap in Java](https://www.baeldung.com/java-arraylist-vs-linkedlist-vs-hashmap)
|
||||||
|
- [Java Deque vs. Stack](https://www.baeldung.com/java-deque-vs-stack)
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh-core.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import org.openjdk.jmh.runner.options.Options;
|
|||||||
import org.openjdk.jmh.runner.options.OptionsBuilder;
|
import org.openjdk.jmh.runner.options.OptionsBuilder;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@ -18,12 +19,12 @@ import java.util.concurrent.TimeUnit;
|
|||||||
@State(Scope.Thread)
|
@State(Scope.Thread)
|
||||||
public class PrimitivesListPerformance {
|
public class PrimitivesListPerformance {
|
||||||
|
|
||||||
private List<Integer> arrayList = new ArrayList<>();
|
private List<Integer> arrayList = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));
|
||||||
private TIntArrayList tList = new TIntArrayList();
|
private TIntArrayList tList = new TIntArrayList(new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
|
||||||
private cern.colt.list.IntArrayList coltList = new cern.colt.list.IntArrayList();
|
private cern.colt.list.IntArrayList coltList = new cern.colt.list.IntArrayList(new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
|
||||||
private IntArrayList fastUtilList = new IntArrayList();
|
private IntArrayList fastUtilList = new IntArrayList(new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
|
||||||
|
|
||||||
private int getValue = 10;
|
private int getValue = 4;
|
||||||
|
|
||||||
@Benchmark
|
@Benchmark
|
||||||
public boolean addArrayList() {
|
public boolean addArrayList() {
|
||||||
|
@ -8,4 +8,5 @@ This module contains articles about Map data structures in Java.
|
|||||||
- [The Map.computeIfAbsent() Method](https://www.baeldung.com/java-map-computeifabsent)
|
- [The Map.computeIfAbsent() Method](https://www.baeldung.com/java-map-computeifabsent)
|
||||||
- [Collections.synchronizedMap vs. ConcurrentHashMap](https://www.baeldung.com/java-synchronizedmap-vs-concurrenthashmap)
|
- [Collections.synchronizedMap vs. ConcurrentHashMap](https://www.baeldung.com/java-synchronizedmap-vs-concurrenthashmap)
|
||||||
- [Java HashMap Load Factor](https://www.baeldung.com/java-hashmap-load-factor)
|
- [Java HashMap Load Factor](https://www.baeldung.com/java-hashmap-load-factor)
|
||||||
|
- [Converting java.util.Properties to HashMap](https://www.baeldung.com/java-convert-properties-to-hashmap)
|
||||||
- More articles: [[<-- prev]](/core-java-modules/core-java-collections-maps-2)
|
- More articles: [[<-- prev]](/core-java-modules/core-java-collections-maps-2)
|
||||||
|
@ -25,17 +25,16 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${openjdk.jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${openjdk.jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<openjdk.jmh.version>1.19</openjdk.jmh.version>
|
|
||||||
<assertj.version>3.11.1</assertj.version>
|
<assertj.version>3.11.1</assertj.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh-generator-annprocess.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -51,8 +51,6 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<jmh-core.version>1.19</jmh-core.version>
|
|
||||||
<jmh-generator-annprocess.version>1.19</jmh-generator-annprocess.version>
|
|
||||||
<assertj.version>3.6.1</assertj.version>
|
<assertj.version>3.6.1</assertj.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -23,12 +23,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.assertj</groupId>
|
<groupId>org.assertj</groupId>
|
||||||
@ -39,7 +39,6 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<jmh.version>1.21</jmh.version>
|
|
||||||
<guava.version>28.2-jre</guava.version>
|
<guava.version>28.2-jre</guava.version>
|
||||||
<!-- testing -->
|
<!-- testing -->
|
||||||
<assertj.version>3.6.1</assertj.version>
|
<assertj.version>3.6.1</assertj.version>
|
||||||
|
@ -21,14 +21,16 @@ public class ThreadPoolInParallelStreamIntegrationTest {
|
|||||||
long lastNum = 1_000_000;
|
long lastNum = 1_000_000;
|
||||||
|
|
||||||
List<Long> aList = LongStream.rangeClosed(firstNum, lastNum).boxed().collect(Collectors.toList());
|
List<Long> aList = LongStream.rangeClosed(firstNum, lastNum).boxed().collect(Collectors.toList());
|
||||||
|
|
||||||
ForkJoinPool customThreadPool = new ForkJoinPool(4);
|
ForkJoinPool customThreadPool = new ForkJoinPool(4);
|
||||||
long actualTotal = customThreadPool
|
|
||||||
.submit(() -> aList.parallelStream()
|
|
||||||
.reduce(0L, Long::sum))
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
long actualTotal = customThreadPool
|
||||||
|
.submit(() -> aList.parallelStream().reduce(0L, Long::sum))
|
||||||
|
.get();
|
||||||
assertEquals((lastNum + firstNum) * lastNum / 2, actualTotal);
|
assertEquals((lastNum + firstNum) * lastNum / 2, actualTotal);
|
||||||
|
} finally {
|
||||||
|
customThreadPool.shutdown();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -5,12 +5,12 @@ import com.google.common.io.CharSource;
|
|||||||
import com.google.common.io.Files;
|
import com.google.common.io.Files;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.io.input.ReaderInputStream;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
public class JavaXToInputStreamUnitTest {
|
public class JavaXToInputStreamUnitTest {
|
||||||
protected final Logger logger = LoggerFactory.getLogger(getClass());
|
protected final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
@ -28,7 +28,7 @@ public class JavaXToInputStreamUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
public final void givenUsingGuava_whenConvertingStringToInputStream_thenCorrect() throws IOException {
|
public final void givenUsingGuava_whenConvertingStringToInputStream_thenCorrect() throws IOException {
|
||||||
final String initialString = "text";
|
final String initialString = "text";
|
||||||
final InputStream targetStream = new ReaderInputStream(CharSource.wrap(initialString).openStream());
|
final InputStream targetStream = CharSource.wrap(initialString).asByteSource(StandardCharsets.UTF_8).openStream();
|
||||||
|
|
||||||
IOUtils.closeQuietly(targetStream);
|
IOUtils.closeQuietly(targetStream);
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,6 @@
|
|||||||
<assertj.version>3.6.1</assertj.version>
|
<assertj.version>3.6.1</assertj.version>
|
||||||
<!-- instrumentation -->
|
<!-- instrumentation -->
|
||||||
<javaassist.version>3.27.0-GA</javaassist.version>
|
<javaassist.version>3.27.0-GA</javaassist.version>
|
||||||
<esapi.version>2.1.0.1</esapi.version>
|
|
||||||
<sun.tools.version>1.8.0</sun.tools.version>
|
<sun.tools.version>1.8.0</sun.tools.version>
|
||||||
<jol-core.version>0.10</jol-core.version>
|
<jol-core.version>0.10</jol-core.version>
|
||||||
<asm.version>8.0.1</asm.version>
|
<asm.version>8.0.1</asm.version>
|
||||||
|
@ -65,8 +65,6 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<jmh-core.version>1.19</jmh-core.version>
|
|
||||||
<jmh-generator.version>1.19</jmh-generator.version>
|
|
||||||
<assertj.version>3.12.2</assertj.version>
|
<assertj.version>3.12.2</assertj.version>
|
||||||
<commons.beanutils.version>1.9.4</commons.beanutils.version>
|
<commons.beanutils.version>1.9.4</commons.beanutils.version>
|
||||||
<guava.version>29.0-jre</guava.version>
|
<guava.version>29.0-jre</guava.version>
|
||||||
|
5
core-java-modules/core-java-lang-4/README.md
Normal file
5
core-java-modules/core-java-lang-4/README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
## Core Java Lang (Part 4)
|
||||||
|
|
||||||
|
This module contains articles about core features in the Java language
|
||||||
|
|
||||||
|
- [The Java final Keyword – Impact on Performance](https://www.baeldung.com/java-final-performance)
|
43
core-java-modules/core-java-lang-4/pom.xml
Normal file
43
core-java-modules/core-java-lang-4/pom.xml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?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>
|
||||||
|
<artifactId>core-java-lang-4</artifactId>
|
||||||
|
<version>0.1.0-SNAPSHOT</version>
|
||||||
|
<name>core-java-lang-4</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung.core-java-modules</groupId>
|
||||||
|
<artifactId>core-java-modules</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<relativePath>../</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
|
<artifactId>jmh-core</artifactId>
|
||||||
|
<version>${jmh-core.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
|
<version>${jmh-generator.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>core-java-lang-4</finalName>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.baeldung.finalkeyword;
|
||||||
|
|
||||||
|
import org.openjdk.jmh.annotations.Benchmark;
|
||||||
|
import org.openjdk.jmh.annotations.BenchmarkMode;
|
||||||
|
import org.openjdk.jmh.annotations.Mode;
|
||||||
|
import org.openjdk.jmh.annotations.OutputTimeUnit;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class BenchmarkRunner {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
org.openjdk.jmh.Main.main(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
@OutputTimeUnit(TimeUnit.NANOSECONDS)
|
||||||
|
@BenchmarkMode(Mode.AverageTime)
|
||||||
|
public static String concatNonFinalStrings() {
|
||||||
|
String x = "x";
|
||||||
|
String y = "y";
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
@OutputTimeUnit(TimeUnit.NANOSECONDS)
|
||||||
|
@BenchmarkMode(Mode.AverageTime)
|
||||||
|
public static String concatFinalStrings() {
|
||||||
|
final String x = "x";
|
||||||
|
final String y = "y";
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.baeldung.finalkeyword;
|
||||||
|
|
||||||
|
import java.io.Console;
|
||||||
|
|
||||||
|
public class ClassVariableFinal {
|
||||||
|
|
||||||
|
static final boolean doX = false;
|
||||||
|
static final boolean doY = true;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Console console = System.console();
|
||||||
|
if (doX) {
|
||||||
|
console.writer().println("x");
|
||||||
|
} else if (doY) {
|
||||||
|
console.writer().println("y");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.baeldung.finalkeyword;
|
||||||
|
|
||||||
|
import java.io.Console;
|
||||||
|
|
||||||
|
public class ClassVariableNonFinal {
|
||||||
|
|
||||||
|
static boolean doX = false;
|
||||||
|
static boolean doY = true;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Console console = System.console();
|
||||||
|
if (doX) {
|
||||||
|
console.writer().println("x");
|
||||||
|
} else if (doY) {
|
||||||
|
console.writer().println("y");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -58,7 +58,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
@ -83,7 +83,6 @@
|
|||||||
<nd4j.version>1.0.0-beta4</nd4j.version>
|
<nd4j.version>1.0.0-beta4</nd4j.version>
|
||||||
<colt.version>1.2.0</colt.version>
|
<colt.version>1.2.0</colt.version>
|
||||||
<la4j.version>0.6.0</la4j.version>
|
<la4j.version>0.6.0</la4j.version>
|
||||||
<jmh.version>1.19</jmh.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -0,0 +1,135 @@
|
|||||||
|
package com.baeldung.classfile;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import com.baeldung.classfile.HelloWorld.HelloSomeone;
|
||||||
|
|
||||||
|
public class Outer {
|
||||||
|
|
||||||
|
// Static Nested class
|
||||||
|
static class StaticNested {
|
||||||
|
public String message() {
|
||||||
|
return "This is a static Nested Class";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Non-static Nested class
|
||||||
|
class Nested {
|
||||||
|
public String message() {
|
||||||
|
return "This is a non-static Nested Class";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Local class
|
||||||
|
public String message() {
|
||||||
|
class Local {
|
||||||
|
private String message() {
|
||||||
|
return "This is a Local Class within a method";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Local local = new Local();
|
||||||
|
return local.message();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Local class within if clause
|
||||||
|
public String message(String name) {
|
||||||
|
if (StringUtils.isEmpty(name)) {
|
||||||
|
class Local {
|
||||||
|
private String message() {
|
||||||
|
return "This is a Local Class within if clause";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Local local = new Local();
|
||||||
|
return local.message();
|
||||||
|
} else
|
||||||
|
return "Welcome to " + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Anonymous Inner class extending a class
|
||||||
|
public String greet() {
|
||||||
|
Outer anonymous = new Outer() {
|
||||||
|
@Override
|
||||||
|
public String greet() {
|
||||||
|
return "Running Anonymous Class...";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return anonymous.greet();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Anonymous inner class implementing an interface
|
||||||
|
public String greet(String name) {
|
||||||
|
|
||||||
|
HelloWorld helloWorld = new HelloWorld() {
|
||||||
|
@Override
|
||||||
|
public String greet(String name) {
|
||||||
|
return "Welcome to " + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return helloWorld.greet(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Anonymous inner class implementing nested interface
|
||||||
|
public String greetSomeone(String name) {
|
||||||
|
|
||||||
|
HelloSomeone helloSomeOne = new HelloSomeone() {
|
||||||
|
@Override
|
||||||
|
public String greet(String name) {
|
||||||
|
return "Hello " + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return helloSomeOne.greet(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nested interface within a class
|
||||||
|
interface HelloOuter {
|
||||||
|
public String hello(String name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enum within a class
|
||||||
|
enum Color {
|
||||||
|
RED, GREEN, BLUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface HelloWorld {
|
||||||
|
|
||||||
|
public String greet(String name);
|
||||||
|
|
||||||
|
// Nested class within an interface
|
||||||
|
class InnerClass implements HelloWorld {
|
||||||
|
@Override
|
||||||
|
public String greet(String name) {
|
||||||
|
return "Inner class within an interface";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nested interface within an interfaces
|
||||||
|
interface HelloSomeone {
|
||||||
|
public String greet(String name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enum within an interface
|
||||||
|
enum Directon {
|
||||||
|
NORTH, SOUTH, EAST, WEST;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Level {
|
||||||
|
LOW, MEDIUM, HIGH;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Foods {
|
||||||
|
|
||||||
|
DRINKS, EATS;
|
||||||
|
|
||||||
|
// Enum within Enum
|
||||||
|
enum DRINKS {
|
||||||
|
APPLE_JUICE, COLA;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum EATS {
|
||||||
|
POTATO, RICE;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.baeldung.classfile;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import com.baeldung.classfile.Outer.Nested;
|
||||||
|
|
||||||
|
public class OuterUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void when_static_nestedClass_then_verifyOutput() {
|
||||||
|
Outer.StaticNested nestedClass = new Outer.StaticNested();
|
||||||
|
assertEquals("This is a static Nested Class", nestedClass.message());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void when_nestedClass_then_verifyOutput() {
|
||||||
|
Outer outer = new Outer();
|
||||||
|
Nested nestedClass = outer.new Nested();
|
||||||
|
assertEquals("This is a non-static Nested Class", nestedClass.message());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void when_localClass_then_verifyOutput() {
|
||||||
|
Outer outer = new Outer();
|
||||||
|
assertEquals("This is a Local Class within a method", outer.message());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void when_localClassInIfClause_then_verifyOutput() {
|
||||||
|
Outer outer = new Outer();
|
||||||
|
assertEquals("Welcome to Baeldung", outer.message("Baeldung"));
|
||||||
|
assertEquals("This is a Local Class within if clause", outer.message(""));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void when_anonymousClass_then_verifyOutput() {
|
||||||
|
Outer outer = new Outer();
|
||||||
|
assertEquals("Running Anonymous Class...", outer.greet());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void when_anonymousClassHelloWorld_then_verifyOutput() {
|
||||||
|
Outer outer = new Outer();
|
||||||
|
assertEquals("Welcome to Baeldung", outer.greet("Baeldung"));
|
||||||
|
}
|
||||||
|
}
|
@ -67,8 +67,6 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<hibernate.core.version>5.4.0.Final</hibernate.core.version>
|
<hibernate.core.version>5.4.0.Final</hibernate.core.version>
|
||||||
<jmh-core.version>1.19</jmh-core.version>
|
|
||||||
<jmh-generator.version>1.19</jmh-generator.version>
|
|
||||||
<guava.version>27.1-jre</guava.version>
|
<guava.version>27.1-jre</guava.version>
|
||||||
<assertj.version>3.10.0</assertj.version>
|
<assertj.version>3.10.0</assertj.version>
|
||||||
<rest-assured.version>3.1.1</rest-assured.version>
|
<rest-assured.version>3.1.1</rest-assured.version>
|
||||||
|
@ -4,3 +4,4 @@
|
|||||||
- [Set Field Value With Reflection](https://www.baeldung.com/java-set-private-field-value)
|
- [Set Field Value With Reflection](https://www.baeldung.com/java-set-private-field-value)
|
||||||
- [Checking If a Method is Static Using Reflection in Java](https://www.baeldung.com/java-check-method-is-static)
|
- [Checking If a Method is Static Using Reflection in Java](https://www.baeldung.com/java-check-method-is-static)
|
||||||
- [Checking if a Java Class is ‘abstract’ Using Reflection](https://www.baeldung.com/java-reflection-is-class-abstract)
|
- [Checking if a Java Class is ‘abstract’ Using Reflection](https://www.baeldung.com/java-reflection-is-class-abstract)
|
||||||
|
- [Invoking a Private Method in Java](https://www.baeldung.com/java-call-private-method)
|
||||||
|
@ -14,6 +14,15 @@
|
|||||||
<relativePath>../</relativePath>
|
<relativePath>../</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-test</artifactId>
|
||||||
|
<version>${spring.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<finalName>core-java-reflection-2</finalName>
|
<finalName>core-java-reflection-2</finalName>
|
||||||
<resources>
|
<resources>
|
||||||
@ -40,5 +49,6 @@
|
|||||||
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
|
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
|
||||||
<source.version>1.8</source.version>
|
<source.version>1.8</source.version>
|
||||||
<target.version>1.8</target.version>
|
<target.version>1.8</target.version>
|
||||||
|
<spring.version>5.3.4</spring.version>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.baeldung.reflection.access.privatemethods;
|
||||||
|
|
||||||
|
public class LongArrayUtil {
|
||||||
|
|
||||||
|
public static int indexOf(long[] array, long target) {
|
||||||
|
return indexOf(array, target, 0, array.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int indexOf(long[] array, long target, int start, int end) {
|
||||||
|
for (int i = start; i < end; i++) {
|
||||||
|
if (array[i] == target) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.baeldung.reflection.access.privatemethods;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.test.util.ReflectionTestUtils;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
class InvokePrivateMethodsUnitTest {
|
||||||
|
|
||||||
|
private final long[] someLongArray = new long[] { 1L, 2L, 1L, 4L, 2L };
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenSearchingForLongValueInSubsequenceUsingReflection_thenTheCorrectIndexOfTheValueIsReturned() throws Exception {
|
||||||
|
Method indexOfMethod = LongArrayUtil.class.getDeclaredMethod("indexOf", long[].class, long.class, int.class, int.class);
|
||||||
|
indexOfMethod.setAccessible(true);
|
||||||
|
|
||||||
|
assertEquals(2, indexOfMethod.invoke(LongArrayUtil.class, someLongArray, 1L, 1, someLongArray.length), "The index should be 2.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenSearchingForLongValueInSubsequenceUsingSpring_thenTheCorrectIndexOfTheValueIsReturned() throws Exception {
|
||||||
|
int indexOfSearchTarget = ReflectionTestUtils.invokeMethod(LongArrayUtil.class, "indexOf", someLongArray, 1L, 1, someLongArray.length);
|
||||||
|
assertEquals(2, indexOfSearchTarget, "The index should be 2.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -15,4 +15,5 @@ This module contains articles about core Java Security
|
|||||||
- [Security Context Basics: User, Subject and Principal](https://www.baeldung.com/security-context-basics)
|
- [Security Context Basics: User, Subject and Principal](https://www.baeldung.com/security-context-basics)
|
||||||
- [Java AES Encryption and Decryption](https://www.baeldung.com/java-aes-encryption-decryption)
|
- [Java AES Encryption and Decryption](https://www.baeldung.com/java-aes-encryption-decryption)
|
||||||
- [InvalidAlgorithmParameterException: Wrong IV Length](https://www.baeldung.com/java-invalidalgorithmparameter-exception)
|
- [InvalidAlgorithmParameterException: Wrong IV Length](https://www.baeldung.com/java-invalidalgorithmparameter-exception)
|
||||||
|
- [The java.security.egd JVM Option](https://www.baeldung.com/java-security-egd)
|
||||||
- More articles: [[<-- prev]](/core-java-modules/core-java-security)
|
- More articles: [[<-- prev]](/core-java-modules/core-java-security)
|
||||||
|
@ -47,7 +47,6 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<maven.compiler.source>1.9</maven.compiler.source>
|
<maven.compiler.source>1.9</maven.compiler.source>
|
||||||
<maven.compiler.target>1.9</maven.compiler.target>
|
<maven.compiler.target>1.9</maven.compiler.target>
|
||||||
<assertj.version>3.11.1</assertj.version>
|
<assertj.version>3.11.1</assertj.version>
|
||||||
|
@ -49,8 +49,6 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<!-- testing -->
|
<!-- testing -->
|
||||||
<assertj.version>3.6.1</assertj.version>
|
<assertj.version>3.6.1</assertj.version>
|
||||||
<!-- plugins -->
|
|
||||||
<maven-surefire-plugin.version>2.22.1</maven-surefire-plugin.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -0,0 +1,95 @@
|
|||||||
|
package com.baeldung.streams.streamvscollection;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class StreamVsCollectionExample {
|
||||||
|
|
||||||
|
static ArrayList<String> userNameSource = new ArrayList<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
userNameSource.add("john");
|
||||||
|
userNameSource.add("smith");
|
||||||
|
userNameSource.add("tom");
|
||||||
|
userNameSource.add("rob");
|
||||||
|
userNameSource.add("charlie");
|
||||||
|
userNameSource.add("alfred");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stream<String> userNames() {
|
||||||
|
return userNameSource.stream();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> userNameList() {
|
||||||
|
return userNames().collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<String> userNameSet() {
|
||||||
|
return userNames().collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, String> userNameMap() {
|
||||||
|
return userNames().collect(Collectors.toMap(u1 -> u1.toString(), u1 -> u1.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stream<String> filterUserNames() {
|
||||||
|
return userNames().filter(i -> i.length() >= 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stream<String> sortUserNames() {
|
||||||
|
return userNames().sorted();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stream<String> limitUserNames() {
|
||||||
|
return userNames().limit(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stream<String> sortFilterLimitUserNames() {
|
||||||
|
return filterUserNames().sorted().limit(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void printStream(Stream<String> stream) {
|
||||||
|
stream.forEach(System.out::println);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void modifyList() {
|
||||||
|
userNameSource.remove(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, String> modifyMap() {
|
||||||
|
Map<String, String> userNameMap = userNameMap();
|
||||||
|
userNameMap.put("bob", "bob");
|
||||||
|
userNameMap.remove("alfred");
|
||||||
|
|
||||||
|
return userNameMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void tryStreamTraversal() {
|
||||||
|
Stream<String> userNameStream = userNames();
|
||||||
|
userNameStream.forEach(System.out::println);
|
||||||
|
|
||||||
|
try {
|
||||||
|
userNameStream.forEach(System.out::println);
|
||||||
|
} catch(IllegalStateException e) {
|
||||||
|
System.out.println("stream has already been operated upon or closed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.out.println(userNameMap());
|
||||||
|
System.out.println(modifyMap());
|
||||||
|
tryStreamTraversal();
|
||||||
|
|
||||||
|
Set<String> set = userNames().collect(Collectors.toCollection(TreeSet::new));
|
||||||
|
set.forEach(val -> System.out.println(val));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -34,7 +34,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh-core.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.assertj</groupId>
|
<groupId>org.assertj</groupId>
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${jmh-core.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.vdurmont</groupId>
|
<groupId>com.vdurmont</groupId>
|
||||||
|
@ -59,7 +59,6 @@
|
|||||||
<compiler.plugin.version>3.8.0</compiler.plugin.version>
|
<compiler.plugin.version>3.8.0</compiler.plugin.version>
|
||||||
<source.version>1.9</source.version>
|
<source.version>1.9</source.version>
|
||||||
<target.version>1.9</target.version>
|
<target.version>1.9</target.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<assertj-core.version>3.12.2</assertj-core.version>
|
<assertj-core.version>3.12.2</assertj-core.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -82,6 +82,7 @@
|
|||||||
<module>core-java-lang</module>
|
<module>core-java-lang</module>
|
||||||
<module>core-java-lang-2</module>
|
<module>core-java-lang-2</module>
|
||||||
<module>core-java-lang-3</module>
|
<module>core-java-lang-3</module>
|
||||||
|
<module>core-java-lang-4</module>
|
||||||
<module>core-java-lang-math</module>
|
<module>core-java-lang-math</module>
|
||||||
<module>core-java-lang-math-2</module>
|
<module>core-java-lang-math-2</module>
|
||||||
<module>core-java-lang-math-3</module>
|
<module>core-java-lang-math-3</module>
|
||||||
@ -147,18 +148,6 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
<build>
|
|
||||||
<pluginManagement>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>${maven-surefire-plugin.version}</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</pluginManagement>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
|
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
|
||||||
<junit-jupiter.version>5.6.2</junit-jupiter.version>
|
<junit-jupiter.version>5.6.2</junit-jupiter.version>
|
||||||
|
@ -45,7 +45,6 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
|
<maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
|
||||||
<pmdVersion>6.0.1</pmdVersion>
|
<pmdVersion>6.0.1</pmdVersion>
|
||||||
<maven.compiler.source>1.8</maven.compiler.source>
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
|
@ -10,10 +10,8 @@ public class CircularBuffer<E> {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public CircularBuffer(int capacity) {
|
public CircularBuffer(int capacity) {
|
||||||
|
|
||||||
this.capacity = (capacity < 1) ? DEFAULT_CAPACITY : capacity;
|
this.capacity = (capacity < 1) ? DEFAULT_CAPACITY : capacity;
|
||||||
this.data = (E[]) new Object[capacity];
|
this.data = (E[]) new Object[this.capacity];
|
||||||
|
|
||||||
this.readSequence = 0;
|
this.readSequence = 0;
|
||||||
this.writeSequence = -1;
|
this.writeSequence = -1;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
public class CircularLinkedList {
|
public class CircularLinkedList {
|
||||||
|
|
||||||
final Logger LOGGER = LoggerFactory.getLogger(CircularLinkedList.class);
|
final Logger logger = LoggerFactory.getLogger(CircularLinkedList.class);
|
||||||
|
|
||||||
private Node head = null;
|
private Node head = null;
|
||||||
private Node tail = null;
|
private Node tail = null;
|
||||||
@ -42,25 +42,30 @@ public class CircularLinkedList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void deleteNode(int valueToDelete) {
|
public void deleteNode(int valueToDelete) {
|
||||||
|
|
||||||
Node currentNode = head;
|
Node currentNode = head;
|
||||||
|
if (head == null) {
|
||||||
if (head != null) {
|
return;
|
||||||
if (currentNode.value == valueToDelete) {
|
}
|
||||||
head = head.nextNode;
|
|
||||||
tail.nextNode = head;
|
|
||||||
} else {
|
|
||||||
do {
|
do {
|
||||||
Node nextNode = currentNode.nextNode;
|
Node nextNode = currentNode.nextNode;
|
||||||
if (nextNode.value == valueToDelete) {
|
if (nextNode.value == valueToDelete) {
|
||||||
|
if (tail == head) {
|
||||||
|
head = null;
|
||||||
|
tail = null;
|
||||||
|
} else {
|
||||||
currentNode.nextNode = nextNode.nextNode;
|
currentNode.nextNode = nextNode.nextNode;
|
||||||
|
if (head == nextNode) {
|
||||||
|
head = head.nextNode;
|
||||||
|
}
|
||||||
|
if (tail == nextNode) {
|
||||||
|
tail = currentNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
currentNode = currentNode.nextNode;
|
currentNode = nextNode;
|
||||||
} while (currentNode != head);
|
} while (currentNode != head);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void traverseList() {
|
public void traverseList() {
|
||||||
|
|
||||||
@ -68,7 +73,7 @@ public class CircularLinkedList {
|
|||||||
|
|
||||||
if (head != null) {
|
if (head != null) {
|
||||||
do {
|
do {
|
||||||
LOGGER.info(currentNode.value + " ");
|
logger.info(currentNode.value + " ");
|
||||||
currentNode = currentNode.nextNode;
|
currentNode = currentNode.nextNode;
|
||||||
} while (currentNode != head);
|
} while (currentNode != head);
|
||||||
}
|
}
|
||||||
|
@ -148,48 +148,46 @@ public class BinaryTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void traverseInOrderWithoutRecursion() {
|
public void traverseInOrderWithoutRecursion() {
|
||||||
Stack<Node> stack = new Stack<Node>();
|
Stack<Node> stack = new Stack<>();
|
||||||
Node current = root;
|
Node current = root;
|
||||||
stack.push(root);
|
|
||||||
while(! stack.isEmpty()) {
|
while (current != null || !stack.isEmpty()) {
|
||||||
while(current.left != null) {
|
while (current != null) {
|
||||||
|
stack.push(current);
|
||||||
current = current.left;
|
current = current.left;
|
||||||
stack.push(current);
|
|
||||||
}
|
|
||||||
current = stack.pop();
|
|
||||||
visit(current.value);
|
|
||||||
if(current.right != null) {
|
|
||||||
current = current.right;
|
|
||||||
stack.push(current);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Node top = stack.pop();
|
||||||
|
visit(top.value);
|
||||||
|
current = top.right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void traversePreOrderWithoutRecursion() {
|
public void traversePreOrderWithoutRecursion() {
|
||||||
Stack<Node> stack = new Stack<Node>();
|
Stack<Node> stack = new Stack<>();
|
||||||
Node current = root;
|
Node current = root;
|
||||||
stack.push(root);
|
stack.push(root);
|
||||||
while(! stack.isEmpty()) {
|
|
||||||
|
while (current != null && !stack.isEmpty()) {
|
||||||
current = stack.pop();
|
current = stack.pop();
|
||||||
visit(current.value);
|
visit(current.value);
|
||||||
|
|
||||||
if(current.right != null)
|
if (current.right != null)
|
||||||
stack.push(current.right);
|
stack.push(current.right);
|
||||||
|
|
||||||
if(current.left != null)
|
if (current.left != null)
|
||||||
stack.push(current.left);
|
stack.push(current.left);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void traversePostOrderWithoutRecursion() {
|
public void traversePostOrderWithoutRecursion() {
|
||||||
Stack<Node> stack = new Stack<Node>();
|
Stack<Node> stack = new Stack<>();
|
||||||
Node prev = root;
|
Node prev = root;
|
||||||
Node current = root;
|
Node current = root;
|
||||||
stack.push(root);
|
stack.push(root);
|
||||||
|
|
||||||
while (!stack.isEmpty()) {
|
while (current != null && !stack.isEmpty()) {
|
||||||
current = stack.peek();
|
current = stack.peek();
|
||||||
boolean hasChild = (current.left != null || current.right != null);
|
boolean hasChild = (current.left != null || current.right != null);
|
||||||
boolean isPrevLastChild = (prev == current.right || (prev == current.left && current.right == null));
|
boolean isPrevLastChild = (prev == current.right || (prev == current.left && current.right == null));
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package com.baeldung.circularlinkedlist;
|
package com.baeldung.circularlinkedlist;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class CircularLinkedListUnitTest {
|
public class CircularLinkedListUnitTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -23,7 +23,7 @@ public class CircularLinkedListUnitTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenACircularLinkedList_WhenDeletingElements_ThenListDoesNotContainThoseElements() {
|
public void givenACircularLinkedList_WhenDeletingInOrderHeadMiddleTail_ThenListDoesNotContainThoseElements() {
|
||||||
CircularLinkedList cll = createCircularLinkedList();
|
CircularLinkedList cll = createCircularLinkedList();
|
||||||
|
|
||||||
assertTrue(cll.containsNode(13));
|
assertTrue(cll.containsNode(13));
|
||||||
@ -39,6 +39,32 @@ public class CircularLinkedListUnitTest {
|
|||||||
assertFalse(cll.containsNode(46));
|
assertFalse(cll.containsNode(46));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenACircularLinkedList_WhenDeletingInOrderTailMiddleHead_ThenListDoesNotContainThoseElements() {
|
||||||
|
CircularLinkedList cll = createCircularLinkedList();
|
||||||
|
|
||||||
|
assertTrue(cll.containsNode(46));
|
||||||
|
cll.deleteNode(46);
|
||||||
|
assertFalse(cll.containsNode(46));
|
||||||
|
|
||||||
|
assertTrue(cll.containsNode(1));
|
||||||
|
cll.deleteNode(1);
|
||||||
|
assertFalse(cll.containsNode(1));
|
||||||
|
|
||||||
|
assertTrue(cll.containsNode(13));
|
||||||
|
cll.deleteNode(13);
|
||||||
|
assertFalse(cll.containsNode(13));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenACircularLinkedListWithOneNode_WhenDeletingElement_ThenListDoesNotContainTheElement() {
|
||||||
|
CircularLinkedList cll = new CircularLinkedList();
|
||||||
|
cll.addNode(1);
|
||||||
|
cll.deleteNode(1);
|
||||||
|
assertFalse(cll.containsNode(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private CircularLinkedList createCircularLinkedList() {
|
private CircularLinkedList createCircularLinkedList() {
|
||||||
CircularLinkedList cll = new CircularLinkedList();
|
CircularLinkedList cll = new CircularLinkedList();
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ public class BinaryTreeUnitTest {
|
|||||||
|
|
||||||
BinaryTree bt = createBinaryTree();
|
BinaryTree bt = createBinaryTree();
|
||||||
|
|
||||||
assertTrue(!bt.isEmpty());
|
assertFalse(bt.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -72,6 +72,7 @@ public class BinaryTreeUnitTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void it_deletes_the_root() {
|
public void it_deletes_the_root() {
|
||||||
|
|
||||||
int value = 12;
|
int value = 12;
|
||||||
BinaryTree bt = new BinaryTree();
|
BinaryTree bt = new BinaryTree();
|
||||||
bt.add(value);
|
bt.add(value);
|
||||||
@ -91,6 +92,14 @@ public class BinaryTreeUnitTest {
|
|||||||
bt.traverseInOrderWithoutRecursion();
|
bt.traverseInOrderWithoutRecursion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAnEmptyBinaryTree_WhenTraversingInOrderWithoutRecursion_ThenNoException() {
|
||||||
|
|
||||||
|
BinaryTree empty = new BinaryTree();
|
||||||
|
|
||||||
|
empty.traverseInOrderWithoutRecursion();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenABinaryTree_WhenTraversingPreOrder_ThenPrintValues() {
|
public void givenABinaryTree_WhenTraversingPreOrder_ThenPrintValues() {
|
||||||
|
|
||||||
@ -101,6 +110,14 @@ public class BinaryTreeUnitTest {
|
|||||||
bt.traversePreOrderWithoutRecursion();
|
bt.traversePreOrderWithoutRecursion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAnEmptyBinaryTree_WhenTraversingPreOrderWithoutRecursion_ThenNoException() {
|
||||||
|
|
||||||
|
BinaryTree empty = new BinaryTree();
|
||||||
|
|
||||||
|
empty.traversePreOrderWithoutRecursion();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenABinaryTree_WhenTraversingPostOrder_ThenPrintValues() {
|
public void givenABinaryTree_WhenTraversingPostOrder_ThenPrintValues() {
|
||||||
|
|
||||||
@ -111,6 +128,14 @@ public class BinaryTreeUnitTest {
|
|||||||
bt.traversePostOrderWithoutRecursion();
|
bt.traversePostOrderWithoutRecursion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAnEmptyBinaryTree_WhenTraversingPostOrderWithoutRecursion_ThenNoException() {
|
||||||
|
|
||||||
|
BinaryTree empty = new BinaryTree();
|
||||||
|
|
||||||
|
empty.traversePostOrderWithoutRecursion();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenABinaryTree_WhenTraversingLevelOrder_ThenPrintValues() {
|
public void givenABinaryTree_WhenTraversingLevelOrder_ThenPrintValues() {
|
||||||
|
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>2.16</version>
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<enableAssertions>true</enableAssertions>
|
<enableAssertions>true</enableAssertions>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -66,7 +66,6 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>${maven-surefire-plugin.version}</version>
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<forkCount>0</forkCount>
|
<forkCount>0</forkCount>
|
||||||
</configuration>
|
</configuration>
|
||||||
@ -75,13 +74,10 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
|
|
||||||
<source.version>9</source.version>
|
<source.version>9</source.version>
|
||||||
<target.version>9</target.version>
|
<target.version>9</target.version>
|
||||||
|
|
||||||
<compiler.plugin.version>3.8.1</compiler.plugin.version>
|
<compiler.plugin.version>3.8.1</compiler.plugin.version>
|
||||||
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
|
|
||||||
|
|
||||||
<appmodules.version>1.0</appmodules.version>
|
<appmodules.version>1.0</appmodules.version>
|
||||||
|
|
||||||
|
@ -99,15 +99,6 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<joda-money.version>1.0.1</joda-money.version>
|
<joda-money.version>1.0.1</joda-money.version>
|
||||||
|
|
||||||
|
@ -97,7 +97,6 @@
|
|||||||
<!-- Skip normal test execution, we use gwt:test instead -->
|
<!-- Skip normal test execution, we use gwt:test instead -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>${surefire.plugin.version}</version>
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<skip>true</skip>
|
<skip>true</skip>
|
||||||
</configuration>
|
</configuration>
|
||||||
@ -113,12 +112,8 @@
|
|||||||
<maven.compiler.source>1.8</maven.compiler.source>
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
<maven.compiler.target>1.8</maven.compiler.target>
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
|
|
||||||
<!-- Don't let your Mac use a crazy non-standard encoding -->
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
|
||||||
<gwt.version>2.8.2</gwt.version>
|
<gwt.version>2.8.2</gwt.version>
|
||||||
<gwt.plugin.version>1.0-rc-8</gwt.plugin.version>
|
<gwt.plugin.version>1.0-rc-8</gwt.plugin.version>
|
||||||
<surefire.plugin.version>2.17</surefire.plugin.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -66,14 +66,6 @@
|
|||||||
<filtering>true</filtering>
|
<filtering>true</filtering>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -38,14 +38,6 @@
|
|||||||
<filtering>true</filtering>
|
<filtering>true</filtering>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -37,14 +37,6 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<finalName>guava-collections-set</finalName>
|
<finalName>guava-collections-set</finalName>
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -71,14 +71,6 @@
|
|||||||
<filtering>true</filtering>
|
<filtering>true</filtering>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -40,14 +40,6 @@
|
|||||||
<filtering>true</filtering>
|
<filtering>true</filtering>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -52,14 +52,6 @@
|
|||||||
<filtering>true</filtering>
|
<filtering>true</filtering>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -46,17 +46,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
|
||||||
<junit-jupiter.version>5.6.2</junit-jupiter.version>
|
<junit-jupiter.version>5.6.2</junit-jupiter.version>
|
||||||
<guava.version>29.0-jre</guava.version>
|
<guava.version>29.0-jre</guava.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -50,16 +50,6 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<junit-jupiter.version>5.6.2</junit-jupiter.version>
|
<junit-jupiter.version>5.6.2</junit-jupiter.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -51,14 +51,6 @@
|
|||||||
<filtering>true</filtering>
|
<filtering>true</filtering>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -3,3 +3,4 @@
|
|||||||
- [Java Map With Case-Insensitive Keys](https://www.baeldung.com/java-map-with-case-insensitive-keys)
|
- [Java Map With Case-Insensitive Keys](https://www.baeldung.com/java-map-with-case-insensitive-keys)
|
||||||
- [Using a Byte Array as Map Key in Java](https://www.baeldung.com/java-map-key-byte-array)
|
- [Using a Byte Array as Map Key in Java](https://www.baeldung.com/java-map-key-byte-array)
|
||||||
- [Using the Map.Entry Java Class](https://www.baeldung.com/java-map-entry)
|
- [Using the Map.Entry Java Class](https://www.baeldung.com/java-map-entry)
|
||||||
|
- [Optimizing HashMap’s Performance](https://www.baeldung.com/java-hashmap-optimize-performance)
|
||||||
|
@ -1,32 +1,32 @@
|
|||||||
package com.baeldung.rmi;
|
package com.baeldung.rmi;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import org.junit.Before;
|
||||||
import static org.junit.Assert.fail;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.rmi.NotBoundException;
|
import java.rmi.NotBoundException;
|
||||||
import java.rmi.RemoteException;
|
import java.rmi.RemoteException;
|
||||||
import java.rmi.registry.LocateRegistry;
|
import java.rmi.registry.LocateRegistry;
|
||||||
import java.rmi.registry.Registry;
|
import java.rmi.registry.Registry;
|
||||||
|
|
||||||
import org.junit.BeforeClass;
|
import static org.junit.Assert.assertEquals;
|
||||||
import org.junit.Test;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
public class JavaRMIIntegrationTest {
|
public class JavaRMIIntegrationTest {
|
||||||
|
|
||||||
@BeforeClass
|
private MessengerServiceImpl messengerService;
|
||||||
public static void whenRunServer_thenServerStarts() {
|
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
try {
|
try {
|
||||||
MessengerServiceImpl server = new MessengerServiceImpl();
|
messengerService = new MessengerServiceImpl();
|
||||||
server.createStubAndBind();
|
messengerService.createStubAndBind();
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
fail("Exception Occurred");
|
fail("Exception Occurred: " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenClientSendsMessageToServer_thenServerSendsResponseMessage() {
|
public void whenClientSendsMessageToServer_thenServerSendsResponseMessage() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Registry registry = LocateRegistry.getRegistry();
|
Registry registry = LocateRegistry.getRegistry();
|
||||||
MessengerService server = (MessengerService) registry.lookup("MessengerService");
|
MessengerService server = (MessengerService) registry.lookup("MessengerService");
|
||||||
@ -34,10 +34,8 @@ public class JavaRMIIntegrationTest {
|
|||||||
|
|
||||||
String expectedMessage = "Server Message";
|
String expectedMessage = "Server Message";
|
||||||
assertEquals(responseMessage, expectedMessage);
|
assertEquals(responseMessage, expectedMessage);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException | NotBoundException e) {
|
||||||
fail("Exception Occurred");
|
fail("Exception Occurred: " + e);
|
||||||
} catch (NotBoundException nb) {
|
|
||||||
fail("Exception Occurred");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,7 +523,6 @@
|
|||||||
<jersey.version>2.25</jersey.version>
|
<jersey.version>2.25</jersey.version>
|
||||||
<arquillian-glassfish.version>1.0.0.Final</arquillian-glassfish.version>
|
<arquillian-glassfish.version>1.0.0.Final</arquillian-glassfish.version>
|
||||||
<org.springframework.security.version>4.2.3.RELEASE</org.springframework.security.version>
|
<org.springframework.security.version>4.2.3.RELEASE</org.springframework.security.version>
|
||||||
<maven-surefire-plugin.version>2.21.0</maven-surefire-plugin.version>
|
|
||||||
<taglibs.standard.version>1.1.2</taglibs.standard.version>
|
<taglibs.standard.version>1.1.2</taglibs.standard.version>
|
||||||
<com.sun.faces.jsf.version>2.2.14</com.sun.faces.jsf.version>
|
<com.sun.faces.jsf.version>2.2.14</com.sun.faces.jsf.version>
|
||||||
<httpclient.version>4.5</httpclient.version>
|
<httpclient.version>4.5</httpclient.version>
|
||||||
|
@ -12,7 +12,7 @@ import javax.batch.runtime.StepExecution;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
class CustomCheckPointUnitTest {
|
class CustomCheckPointIntegrationTest {
|
||||||
@Test
|
@Test
|
||||||
public void givenChunk_whenCustomCheckPoint_thenCommitCountIsThree() throws Exception {
|
public void givenChunk_whenCustomCheckPoint_thenCommitCountIsThree() throws Exception {
|
||||||
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
@ -16,7 +16,7 @@ import javax.batch.runtime.StepExecution;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
class JobSequenceUnitTest {
|
class JobSequenceIntegrationTest {
|
||||||
@Test
|
@Test
|
||||||
public void givenTwoSteps_thenBatch_CompleteWithSuccess() throws Exception {
|
public void givenTwoSteps_thenBatch_CompleteWithSuccess() throws Exception {
|
||||||
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
@ -11,7 +11,7 @@ import javax.batch.runtime.JobExecution;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
class SimpleBatchLetUnitTest {
|
class SimpleBatchLetIntegrationTest {
|
||||||
@Test
|
@Test
|
||||||
public void givenBatchLet_thenBatch_CompleteWithSuccess() throws Exception {
|
public void givenBatchLet_thenBatch_CompleteWithSuccess() throws Exception {
|
||||||
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
@ -16,7 +16,7 @@ import javax.batch.runtime.StepExecution;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
class SimpleChunkUnitTest {
|
class SimpleChunkIntegrationTest {
|
||||||
@Test
|
@Test
|
||||||
public void givenChunk_thenBatch_CompletesWithSucess() throws Exception {
|
public void givenChunk_thenBatch_CompletesWithSucess() throws Exception {
|
||||||
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
@ -13,7 +13,7 @@ import javax.batch.runtime.StepExecution;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
class SimpleErrorChunkUnitTest {
|
class SimpleErrorChunkIntegrationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenChunkError_thenBatch_CompletesWithFailed() throws Exception {
|
public void givenChunkError_thenBatch_CompletesWithFailed() throws Exception {
|
@ -1099,8 +1099,6 @@
|
|||||||
<scala.version>2.12.6</scala.version>
|
<scala.version>2.12.6</scala.version>
|
||||||
<node.version>v10.15.0</node.version>
|
<node.version>v10.15.0</node.version>
|
||||||
<npm.version>6.4.1</npm.version>
|
<npm.version>6.4.1</npm.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
|
||||||
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
|
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
|
||||||
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
@ -1020,8 +1020,6 @@
|
|||||||
<scala.version>2.12.6</scala.version>
|
<scala.version>2.12.6</scala.version>
|
||||||
<node.version>v8.12.0</node.version>
|
<node.version>v8.12.0</node.version>
|
||||||
<npm.version>6.4.1</npm.version>
|
<npm.version>6.4.1</npm.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
|
||||||
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
|
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
|
||||||
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
@ -840,8 +840,6 @@
|
|||||||
<scala.version>2.12.6</scala.version>
|
<scala.version>2.12.6</scala.version>
|
||||||
<node.version>v8.12.0</node.version>
|
<node.version>v8.12.0</node.version>
|
||||||
<npm.version>6.4.1</npm.version>
|
<npm.version>6.4.1</npm.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
|
||||||
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
|
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
|
||||||
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
@ -842,8 +842,6 @@
|
|||||||
<scala.version>2.12.6</scala.version>
|
<scala.version>2.12.6</scala.version>
|
||||||
<node.version>v8.12.0</node.version>
|
<node.version>v8.12.0</node.version>
|
||||||
<npm.version>6.4.1</npm.version>
|
<npm.version>6.4.1</npm.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
|
||||||
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
|
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
|
||||||
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
@ -47,3 +47,4 @@ Available commands (assumes httpie - https://github.com/jkbrzt/httpie):
|
|||||||
## Relevant articles:
|
## Relevant articles:
|
||||||
|
|
||||||
- [Supercharge Java Authentication with JSON Web Tokens (JWTs)](https://www.baeldung.com/java-json-web-tokens-jjwt)
|
- [Supercharge Java Authentication with JSON Web Tokens (JWTs)](https://www.baeldung.com/java-json-web-tokens-jjwt)
|
||||||
|
- [Decode a JWT Token in Java](https://www.baeldung.com/java-jwt-token-decode)
|
||||||
|
@ -41,6 +41,12 @@
|
|||||||
<artifactId>jjwt</artifactId>
|
<artifactId>jjwt</artifactId>
|
||||||
<version>${jjwt.version}</version>
|
<version>${jjwt.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
package io.jsonwebtoken.jjwtfun.util;
|
||||||
|
|
||||||
|
import io.jsonwebtoken.SignatureAlgorithm;
|
||||||
|
import io.jsonwebtoken.impl.crypto.DefaultJwtSignatureValidator;
|
||||||
|
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
import static io.jsonwebtoken.SignatureAlgorithm.HS256;
|
||||||
|
|
||||||
|
public class JWTDecoderUtil {
|
||||||
|
|
||||||
|
public static String decodeJWTToken(String token) {
|
||||||
|
Base64.Decoder decoder = Base64.getDecoder();
|
||||||
|
|
||||||
|
String[] chunks = token.split("\\.");
|
||||||
|
|
||||||
|
String header = new String(decoder.decode(chunks[0]));
|
||||||
|
String payload = new String(decoder.decode(chunks[1]));
|
||||||
|
|
||||||
|
return header + " " + payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String decodeJWTToken(String token, String secretKey) throws Exception {
|
||||||
|
Base64.Decoder decoder = Base64.getDecoder();
|
||||||
|
|
||||||
|
String[] chunks = token.split("\\.");
|
||||||
|
|
||||||
|
String header = new String(decoder.decode(chunks[0]));
|
||||||
|
String payload = new String(decoder.decode(chunks[1]));
|
||||||
|
|
||||||
|
String tokenWithoutSignature = chunks[0] + "." + chunks[1];
|
||||||
|
String signature = chunks[2];
|
||||||
|
|
||||||
|
SignatureAlgorithm sa = HS256;
|
||||||
|
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), sa.getJcaName());
|
||||||
|
|
||||||
|
DefaultJwtSignatureValidator validator = new DefaultJwtSignatureValidator(sa, secretKeySpec);
|
||||||
|
|
||||||
|
if (!validator.isValid(tokenWithoutSignature, signature)) {
|
||||||
|
throw new Exception("Could not verify JWT token integrity!");
|
||||||
|
}
|
||||||
|
|
||||||
|
return header + " " + payload;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package io.jsonwebtoken.jjwtfun.util;
|
||||||
|
|
||||||
|
import io.jsonwebtoken.SignatureAlgorithm;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
|
class JWTDecoderUtilUnitTest {
|
||||||
|
|
||||||
|
private final static String SIMPLE_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkJhZWxkdW5nIFVzZXIiLCJpYXQiOjE1MTYyMzkwMjJ9";
|
||||||
|
private final static String SIGNED_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkJhZWxkdW5nIFVzZXIiLCJpYXQiOjE1MTYyMzkwMjJ9.qH7Zj_m3kY69kxhaQXTa-ivIpytKXXjZc1ZSmapZnGE";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenSimpleToken_whenDecoding_thenStringOfHeaderPayloadAreReturned() {
|
||||||
|
assertThat(JWTDecoderUtil.decodeJWTToken(SIMPLE_TOKEN))
|
||||||
|
.contains(SignatureAlgorithm.HS256.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenSignedToken_whenDecodingWithInvalidSecret_thenIntegrityIsNotValidated() {
|
||||||
|
assertThatThrownBy(() -> JWTDecoderUtil.decodeJWTToken(SIGNED_TOKEN, "BAD_SECRET"))
|
||||||
|
.hasMessage("Could not verify JWT token integrity!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenSignedToken_whenDecodingWithValidSecret_thenIntegrityIsValidated() throws Exception {
|
||||||
|
assertThat(JWTDecoderUtil.decodeJWTToken(SIGNED_TOKEN, "MySecretKey"))
|
||||||
|
.contains("Baeldung User");
|
||||||
|
}
|
||||||
|
}
|
@ -52,3 +52,4 @@ Enjoy it :)
|
|||||||
|
|
||||||
- [Intro to Performance Testing using JMeter](https://www.baeldung.com/jmeter)
|
- [Intro to Performance Testing using JMeter](https://www.baeldung.com/jmeter)
|
||||||
- [Configure Jenkins to Run and Show JMeter Tests](https://www.baeldung.com/jenkins-and-jmeter)
|
- [Configure Jenkins to Run and Show JMeter Tests](https://www.baeldung.com/jenkins-and-jmeter)
|
||||||
|
- [Write Extracted Data to a File Using JMeter](https://www.baeldung.com/jmeter-write-to-file)
|
||||||
|
@ -19,12 +19,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
<version>${openjdk.jmh.version}</version>
|
<version>${jmh-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-generator-annprocess</artifactId>
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
<version>${openjdk.jmh.version}</version>
|
<version>${jmh-generator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jol</groupId>
|
<groupId>org.openjdk.jol</groupId>
|
||||||
@ -76,7 +76,6 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<openjdk.jmh.version>1.19</openjdk.jmh.version>
|
|
||||||
<maven-jar-plugin.version>3.0.2</maven-jar-plugin.version>
|
<maven-jar-plugin.version>3.0.2</maven-jar-plugin.version>
|
||||||
<jol-core.version>0.10</jol-core.version>
|
<jol-core.version>0.10</jol-core.version>
|
||||||
<maven-assembly-plugin.version>3.2.0</maven-assembly-plugin.version>
|
<maven-assembly-plugin.version>3.2.0</maven-assembly-plugin.version>
|
||||||
|
17
kubernetes/k8s-intro/README.md
Normal file
17
kubernetes/k8s-intro/README.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Kubernetes Java API Sample Code
|
||||||
|
|
||||||
|
This module contains sample code used to show how to use the Kubernetes client Java API.
|
||||||
|
|
||||||
|
Before running those samples, make sure that your environment is correctly configured to access
|
||||||
|
a working Kubernetes cluster.
|
||||||
|
|
||||||
|
An easy way to check that everything is working as expected is issuing any *kubectl get* command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ kubectl get nodes
|
||||||
|
```
|
||||||
|
If you get a valid response, then you're good to go.
|
||||||
|
|
||||||
|
### Relevant Articles:
|
||||||
|
|
||||||
|
- [Paging and Async Calls with the Kubernetes API](https://www.baeldung.com/java-kubernetes-paging-async)
|
41
kubernetes/k8s-intro/pom.xml
Normal file
41
kubernetes/k8s-intro/pom.xml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<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>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>kubernetes-parent</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<artifactId>k8s-intro</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.kubernetes</groupId>
|
||||||
|
<artifactId>client-java</artifactId>
|
||||||
|
<version>11.0.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-classic</artifactId>
|
||||||
|
<version>1.2.3</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<configuration>
|
||||||
|
<!-- http://maven.apache.org/plugins/maven-compiler-plugin/ -->
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.baeldung.kubernetes.intro;
|
||||||
|
|
||||||
|
import io.kubernetes.client.openapi.ApiCallback;
|
||||||
|
import io.kubernetes.client.openapi.ApiException;
|
||||||
|
import io.kubernetes.client.openapi.apis.CoreV1Api;
|
||||||
|
import okhttp3.Call;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface ApiInvoker<R> {
|
||||||
|
Call apply(CoreV1Api api, ApiCallback<R> callback) throws ApiException;
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
package com.baeldung.kubernetes.intro;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import io.kubernetes.client.openapi.ApiCallback;
|
||||||
|
import io.kubernetes.client.openapi.ApiException;
|
||||||
|
import io.kubernetes.client.openapi.apis.CoreV1Api;
|
||||||
|
import okhttp3.Call;
|
||||||
|
|
||||||
|
public class AsyncHelper<R> implements ApiCallback<R> {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(AsyncHelper.class);
|
||||||
|
|
||||||
|
private CoreV1Api api;
|
||||||
|
private CompletableFuture<R> callResult;
|
||||||
|
|
||||||
|
private AsyncHelper(CoreV1Api api) {
|
||||||
|
this.api = api;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> CompletableFuture<T> doAsync(CoreV1Api api, ApiInvoker<T> invoker) {
|
||||||
|
|
||||||
|
AsyncHelper<T> p = new AsyncHelper<>(api);
|
||||||
|
return p.execute(invoker);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CompletableFuture<R> execute( ApiInvoker<R> invoker) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
callResult = new CompletableFuture<>();
|
||||||
|
log.info("[I38] Calling API...");
|
||||||
|
final Call call = invoker.apply(api,this);
|
||||||
|
log.info("[I41] API Succesfully invoked: method={}, url={}",
|
||||||
|
call.request().method(),
|
||||||
|
call.request().url());
|
||||||
|
return callResult;
|
||||||
|
}
|
||||||
|
catch(ApiException aex) {
|
||||||
|
callResult.completeExceptionally(aex);
|
||||||
|
return callResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(ApiException e, int statusCode, Map<String, List<String>> responseHeaders) {
|
||||||
|
log.error("[E53] onFailure",e);
|
||||||
|
callResult.completeExceptionally(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(R result, int statusCode, Map<String, List<String>> responseHeaders) {
|
||||||
|
log.error("[E61] onSuccess: statusCode={}",statusCode);
|
||||||
|
callResult.complete(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUploadProgress(long bytesWritten, long contentLength, boolean done) {
|
||||||
|
log.info("[E61] onUploadProgress: bytesWritten={}, contentLength={}, done={}",bytesWritten,contentLength,done);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDownloadProgress(long bytesRead, long contentLength, boolean done) {
|
||||||
|
log.info("[E75] onDownloadProgress: bytesRead={}, contentLength={}, done={}",bytesRead,contentLength,done);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.baeldung.kubernetes.intro;
|
||||||
|
|
||||||
|
|
||||||
|
import io.kubernetes.client.openapi.ApiClient;
|
||||||
|
import io.kubernetes.client.openapi.apis.CoreV1Api;
|
||||||
|
import io.kubernetes.client.openapi.models.V1NodeList;
|
||||||
|
import io.kubernetes.client.util.Config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Philippe
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ListNodes {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
ApiClient client = Config.defaultClient();
|
||||||
|
CoreV1Api api = new CoreV1Api(client);
|
||||||
|
V1NodeList nodeList = api.listNode(null, null, null, null, null, null, null, null, 10, false);
|
||||||
|
nodeList.getItems()
|
||||||
|
.stream()
|
||||||
|
.forEach((node) -> System.out.println(node.getMetadata()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.baeldung.kubernetes.intro;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import io.kubernetes.client.openapi.ApiClient;
|
||||||
|
import io.kubernetes.client.openapi.apis.CoreV1Api;
|
||||||
|
import io.kubernetes.client.openapi.models.V1NodeList;
|
||||||
|
import io.kubernetes.client.util.Config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Philippe
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ListNodesAsync {
|
||||||
|
|
||||||
|
private static Logger log = LoggerFactory.getLogger(ListNodesAsync.class);
|
||||||
|
/**
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
// Initial setup
|
||||||
|
ApiClient client = Config.defaultClient();
|
||||||
|
CoreV1Api api = new CoreV1Api(client);
|
||||||
|
|
||||||
|
// Start async call
|
||||||
|
CompletableFuture<V1NodeList> p = AsyncHelper.doAsync(api,(capi,cb) ->
|
||||||
|
capi.listNodeAsync(null, null, null, null, null, null, null, null, 10, false, cb)
|
||||||
|
);
|
||||||
|
|
||||||
|
p.thenAcceptAsync((nodeList) -> {
|
||||||
|
log.info("[I40] Processing results...");
|
||||||
|
nodeList.getItems()
|
||||||
|
.stream()
|
||||||
|
.forEach((node) -> System.out.println(node.getMetadata()));
|
||||||
|
});
|
||||||
|
|
||||||
|
log.info("[I46] Waiting results...");
|
||||||
|
p.get(10, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.baeldung.kubernetes.intro;
|
||||||
|
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import io.kubernetes.client.openapi.ApiClient;
|
||||||
|
import io.kubernetes.client.openapi.apis.CoreV1Api;
|
||||||
|
import io.kubernetes.client.openapi.models.V1NodeList;
|
||||||
|
import io.kubernetes.client.openapi.models.V1PodList;
|
||||||
|
import io.kubernetes.client.util.Config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Philippe
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ListPodsPaged {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(ListPodsPaged.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
ApiClient client = Config.defaultClient();
|
||||||
|
CoreV1Api api = new CoreV1Api(client);
|
||||||
|
String continuationToken = null;
|
||||||
|
int limit = 2; // Just for illustration purposes. Real world values would range from ~100 to ~1000/page
|
||||||
|
Long remaining = null;
|
||||||
|
do {
|
||||||
|
log.info("==========================================================================");
|
||||||
|
log.info("Retrieving data: continuationToken={}, remaining={}", continuationToken,remaining);
|
||||||
|
V1PodList items = api.listPodForAllNamespaces(null, continuationToken, null, null, limit, null, null, null, 10, false);
|
||||||
|
continuationToken = items.getMetadata().getContinue();
|
||||||
|
remaining = items.getMetadata().getRemainingItemCount();
|
||||||
|
items.getItems()
|
||||||
|
.stream()
|
||||||
|
.forEach((node) -> System.out.println(node.getMetadata()));
|
||||||
|
} while( continuationToken != null );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.baeldung.kubernetes.intro;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class ListNodesAsyncLiveTest {
|
||||||
|
@Test
|
||||||
|
void whenListNodes_thenSuccess() throws Exception {
|
||||||
|
ListNodesAsync.main(new String[] {});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.baeldung.kubernetes.intro;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class ListNodesLiveTest {
|
||||||
|
@Test
|
||||||
|
void whenListNodes_thenSuccess() throws Exception {
|
||||||
|
ListNodes.main(new String[] {});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.baeldung.kubernetes.intro;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class ListPodsPagedLiveTest {
|
||||||
|
@Test
|
||||||
|
void whenListPodsPage_thenSuccess() throws Exception {
|
||||||
|
ListPodsPaged.main(new String[] {});
|
||||||
|
}
|
||||||
|
}
|
11
kubernetes/k8s-intro/src/test/resources/logback.xml
Normal file
11
kubernetes/k8s-intro/src/test/resources/logback.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="debug">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user