This commit is contained in:
Philippe 2020-08-23 18:24:57 -03:00
commit ca4cdec729
859 changed files with 2663 additions and 1095 deletions

View File

@ -3,6 +3,7 @@
This module contains articles about searching algorithms. This module contains articles about searching algorithms.
### Relevant articles: ### Relevant articles:
- [Binary Search Algorithm in Java](https://www.baeldung.com/java-binary-search) - [Binary Search Algorithm in Java](https://www.baeldung.com/java-binary-search)
- [Depth First Search in Java](https://www.baeldung.com/java-depth-first-search) - [Depth First Search in Java](https://www.baeldung.com/java-depth-first-search)
- [Interpolation Search in Java](https://www.baeldung.com/java-interpolation-search) - [Interpolation Search in Java](https://www.baeldung.com/java-interpolation-search)
@ -11,4 +12,4 @@ This module contains articles about searching algorithms.
- [Monte Carlo Tree Search for Tic-Tac-Toe Game](https://www.baeldung.com/java-monte-carlo-tree-search) - [Monte Carlo Tree Search for Tic-Tac-Toe Game](https://www.baeldung.com/java-monte-carlo-tree-search)
- [Range Search Algorithm in Java](https://www.baeldung.com/java-range-search) - [Range Search Algorithm in Java](https://www.baeldung.com/java-range-search)
- [Fast Pattern Matching of Strings Using Suffix Tree](https://www.baeldung.com/java-pattern-matching-suffix-tree) - [Fast Pattern Matching of Strings Using Suffix Tree](https://www.baeldung.com/java-pattern-matching-suffix-tree)
- [Topological Sort of Directed Acyclic Graph](https://www.baeldung.com/cs/dag-topological-sort) - [Find the Kth Smallest Element in Two Sorted Arrays](https://www.baeldung.com/java-kth-smallest-element-in-sorted-arrays)

View File

@ -0,0 +1,126 @@
package com.baeldung.algorithms.kthsmallest;
import java.util.Arrays;
import java.util.NoSuchElementException;
import static java.lang.Math.max;
import static java.lang.Math.min;
public class KthSmallest {
public static int findKthSmallestElement(int k, int[] list1, int[] list2) throws NoSuchElementException, IllegalArgumentException {
checkInput(k, list1, list2);
// we are looking for the minimum value
if(k == 1) {
return min(list1[0], list2[0]);
}
// we are looking for the maximum value
if(list1.length + list2.length == k) {
return max(list1[list1.length-1], list2[list2.length-1]);
}
// swap lists if needed to make sure we take at least one element from list1
if(k <= list2.length && list2[k-1] < list1[0]) {
int[] list1_ = list1;
list1 = list2;
list2 = list1_;
}
// correct left boundary if k is bigger than the size of list2
int left = k < list2.length ? 0 : k - list2.length - 1;
// the inital right boundary cannot exceed the list1
int right = min(k-1, list1.length - 1);
int nElementsList1, nElementsList2;
// binary search
do {
nElementsList1 = ((left + right) / 2) + 1;
nElementsList2 = k - nElementsList1;
if(nElementsList2 > 0) {
if (list1[nElementsList1 - 1] > list2[nElementsList2 - 1]) {
right = nElementsList1 - 2;
} else {
left = nElementsList1;
}
}
} while(!kthSmallesElementFound(list1, list2, nElementsList1, nElementsList2));
return nElementsList2 == 0 ? list1[nElementsList1-1] : max(list1[nElementsList1-1], list2[nElementsList2-1]);
}
private static boolean kthSmallesElementFound(int[] list1, int[] list2, int nElementsList1, int nElementsList2) {
// we do not take any element from the second list
if(nElementsList2 < 1) {
return true;
}
if(list1[nElementsList1-1] == list2[nElementsList2-1]) {
return true;
}
if(nElementsList1 == list1.length) {
return list1[nElementsList1-1] <= list2[nElementsList2];
}
if(nElementsList2 == list2.length) {
return list2[nElementsList2-1] <= list1[nElementsList1];
}
return list1[nElementsList1-1] <= list2[nElementsList2] && list2[nElementsList2-1] <= list1[nElementsList1];
}
private static void checkInput(int k, int[] list1, int[] list2) throws NoSuchElementException, IllegalArgumentException {
if(list1 == null || list2 == null || k < 1) {
throw new IllegalArgumentException();
}
if(list1.length == 0 || list2.length == 0) {
throw new IllegalArgumentException();
}
if(k > list1.length + list2.length) {
throw new NoSuchElementException();
}
}
public static int getKthElementSorted(int[] list1, int[] list2, int k) {
int length1 = list1.length, length2 = list2.length;
int[] combinedArray = new int[length1 + length2];
System.arraycopy(list1, 0, combinedArray, 0, list1.length);
System.arraycopy(list2, 0, combinedArray, list1.length, list2.length);
Arrays.sort(combinedArray);
return combinedArray[k-1];
}
public static int getKthElementMerge(int[] list1, int[] list2, int k) {
int i1 = 0, i2 = 0;
while(i1 < list1.length && i2 < list2.length && (i1 + i2) < k) {
if(list1[i1] < list2[i2]) {
i1++;
} else {
i2++;
}
}
if((i1 + i2) < k) {
return i1 < list1.length ? list1[k - i2 - 1] : list2[k - i1 - 1];
} else if(i1 > 0 && i2 > 0) {
return Math.max(list1[i1-1], list2[i2-1]);
} else {
return i1 == 0 ? list2[i2-1] : list1[i1-1];
}
}
}

View File

@ -0,0 +1,288 @@
package com.baeldung.algorithms.kthsmallest;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import java.util.*;
import static com.baeldung.algorithms.kthsmallest.KthSmallest.*;
import static org.junit.jupiter.api.Assertions.*;
public class KthSmallestUnitTest {
@Nested
class Exceptions {
@Test
public void when_at_least_one_list_is_null_then_an_exception_is_thrown() {
Executable executable1 = () -> findKthSmallestElement(1, null, null);
Executable executable2 = () -> findKthSmallestElement(1, new int[]{2}, null);
Executable executable3 = () -> findKthSmallestElement(1, null, new int[]{2});
assertThrows(IllegalArgumentException.class, executable1);
assertThrows(IllegalArgumentException.class, executable2);
assertThrows(IllegalArgumentException.class, executable3);
}
@Test
public void when_at_least_one_list_is_empty_then_an_exception_is_thrown() {
Executable executable1 = () -> findKthSmallestElement(1, new int[]{}, new int[]{2});
Executable executable2 = () -> findKthSmallestElement(1, new int[]{2}, new int[]{});
Executable executable3 = () -> findKthSmallestElement(1, new int[]{}, new int[]{});
assertThrows(IllegalArgumentException.class, executable1);
assertThrows(IllegalArgumentException.class, executable2);
assertThrows(IllegalArgumentException.class, executable3);
}
@Test
public void when_k_is_smaller_than_0_then_an_exception_is_thrown() {
Executable executable1 = () -> findKthSmallestElement(-1, new int[]{2}, new int[]{2});
assertThrows(IllegalArgumentException.class, executable1);
}
@Test
public void when_k_is_smaller_than_1_then_an_exception_is_thrown() {
Executable executable1 = () -> findKthSmallestElement(0, new int[]{2}, new int[]{2});
assertThrows(IllegalArgumentException.class, executable1);
}
@Test
public void when_k_bigger_then_the_two_lists_then_an_exception_is_thrown() {
Executable executable1 = () -> findKthSmallestElement(6, new int[]{1, 5, 6}, new int[]{2, 5});
assertThrows(NoSuchElementException.class, executable1);
}
}
@Nested
class K_is_smaller_than_the_size_of_list1_and_the_size_of_list2 {
@Test
public void when_k_is_1_then_the_smallest_element_is_returned_from_list1() {
int result = findKthSmallestElement(1, new int[]{2, 7}, new int[]{3, 5});
assertEquals(2, result);
}
@Test
public void when_k_is_1_then_the_smallest_element_is_returned_list2() {
int result = findKthSmallestElement(1, new int[]{3, 5}, new int[]{2, 7});
assertEquals(2, result);
}
@Test
public void when_kth_element_is_smallest_element_and_occurs_in_both_lists() {
int[] list1 = new int[]{1, 2, 3};
int[] list2 = new int[]{1, 2, 3};
int result = findKthSmallestElement(1, list1, list2);
assertEquals(1, result);
}
@Test
public void when_kth_element_is_smallest_element_and_occurs_in_both_lists2() {
int[] list1 = new int[]{1, 2, 3};
int[] list2 = new int[]{1, 2, 3};
int result = findKthSmallestElement(2, list1, list2);
assertEquals(1, result);
}
@Test
public void when_kth_element_is_largest_element_and_occurs_in_both_lists_1() {
int[] list1 = new int[]{1, 2, 3};
int[] list2 = new int[]{1, 2, 3};
int result = findKthSmallestElement(5, list1, list2);
assertEquals(3, result);
}
@Test
public void when_kth_element_is_largest_element_and_occurs_in_both_lists_2() {
int[] list1 = new int[]{1, 2, 3};
int[] list2 = new int[]{1, 2, 3};
int result = findKthSmallestElement(6, list1, list2);
assertEquals(3, result);
}
@Test
public void when_kth_element_and_occurs_in_both_lists() {
int[] list1 = new int[]{1, 2, 3};
int[] list2 = new int[]{0, 2, 3};
int result = findKthSmallestElement(3, list1, list2);
assertEquals(2, result);
}
@Test
public void and_kth_element_is_in_first_list() {
int[] list1 = new int[]{1,2,3,4};
int[] list2 = new int[]{1,3,4,5};
int result = findKthSmallestElement(3, list1, list2);
assertEquals(2, result);
}
@Test
public void and_kth_is_in_second_list() {
int[] list1 = new int[]{1,3,4,4};
int[] list2 = new int[]{1,2,4,5};
int result = findKthSmallestElement(3, list1, list2);
assertEquals(2, result);
}
@Test
public void and_elements_in_first_list_are_all_smaller_than_second_list() {
int[] list1 = new int[]{1,3,7,9};
int[] list2 = new int[]{11,12,14,15};
int result = findKthSmallestElement(3, list1, list2);
assertEquals(7, result);
}
@Test
public void and_elements_in_first_list_are_all_smaller_than_second_list2() {
int[] list1 = new int[]{1,3,7,9};
int[] list2 = new int[]{11,12,14,15};
int result = findKthSmallestElement(4, list1, list2);
assertEquals(9, result);
}
@Test
public void and_only_elements_from_second_list_are_part_of_result() {
int[] list1 = new int[]{11,12,14,15};
int[] list2 = new int[]{1,3,7,9};
int result = findKthSmallestElement(3, list1, list2);
assertEquals(7, result);
}
@Test
public void and_only_elements_from_second_list_are_part_of_result2() {
int[] list1 = new int[]{11,12,14,15};
int[] list2 = new int[]{1,3,7,9};
int result = findKthSmallestElement(4, list1, list2);
assertEquals(9, result);
}
}
@Nested
class K_is_bigger_than_the_size_of_at_least_one_of_the_lists {
@Test
public void k_is_smaller_than_list1_and_bigger_than_list2() {
int[] list1 = new int[]{1, 2, 3, 4, 7, 9};
int[] list2 = new int[]{1, 2, 3};
int result = findKthSmallestElement(5, list1, list2);
assertEquals(3, result);
}
@Test
public void k_is_bigger_than_list1_and_smaller_than_list2() {
int[] list1 = new int[]{1, 2, 3};
int[] list2 = new int[]{1, 2, 3, 4, 7, 9};
int result = findKthSmallestElement(5, list1, list2);
assertEquals(3, result);
}
@Test
public void when_k_is_bigger_than_the_size_of_both_lists_and_elements_in_second_list_are_all_smaller_than_first_list() {
int[] list1 = new int[]{9, 11, 13, 55};
int[] list2 = new int[]{1, 2, 3, 7};
int result = findKthSmallestElement(6, list1, list2);
assertEquals(11, result);
}
@Test
public void when_k_is_bigger_than_the_size_of_both_lists_and_elements_in_second_list_are_all_bigger_than_first_list() {
int[] list1 = new int[]{1, 2, 3, 7};
int[] list2 = new int[]{9, 11, 13, 55};
int result = findKthSmallestElement(6, list1, list2);
assertEquals(11, result);
}
@Test
public void when_k_is_bigger_than_the_size_of_both_lists() {
int[] list1 = new int[]{3, 7, 9, 11, 55};
int[] list2 = new int[]{1, 2, 3, 7, 13};
int result = findKthSmallestElement(7, list1, list2);
assertEquals(9, result);
}
@Test
public void when_k_is_bigger_than_the_size_of_both_lists_and_list1_has_more_elements_than_list2() {
int[] list1 = new int[]{3, 7, 9, 11, 55, 77, 100, 200};
int[] list2 = new int[]{1, 2, 3, 7, 13};
int result = findKthSmallestElement(11, list1, list2);
assertEquals(77, result);
}
@Test
public void max_test() {
int[] list1 = new int[]{100, 200};
int[] list2 = new int[]{1, 2, 3};
int result = findKthSmallestElement(4, list1, list2);
assertEquals(100, result);
}
@Test
public void max_test2() {
int[] list1 = new int[]{100, 200};
int[] list2 = new int[]{1, 2, 3};
int result = findKthSmallestElement(5, list1, list2);
assertEquals(200, result);
}
@Test
public void when_k_is_smaller_than_the_size_of_both_lists_and_kth_element_in_list2() {
int[] list1 = new int[]{1, 2, 5};
int[] list2 = new int[]{1, 3, 4, 7};
int result = findKthSmallestElement(4, list1, list2);
assertEquals(3, result);
}
@Test
public void when_k_is_smaller_than_the_size_of_both_lists_and_kth_element_is_smallest_in_list2() {
int[] list1 = new int[]{1, 2, 5};
int[] list2 = new int[]{3, 4, 7};
int result = findKthSmallestElement(3, list1, list2);
assertEquals(3, result);
}
@Test
public void when_k_is_smaller_than_the_size_of_both_lists_and_kth_element_is_smallest_in_list23() {
int[] list1 = new int[]{3, 11, 27, 53, 90};
int[] list2 = new int[]{4, 20, 21, 100};
int result = findKthSmallestElement(5, list1, list2);
assertEquals(21, result);
}
}
// @Test
// public void randomTests() {
// IntStream.range(1, 100000).forEach(i -> random());
// }
private void random() {
Random random = new Random();
int length1 = (Math.abs(random.nextInt())) % 1000 + 1;
int length2 = (Math.abs(random.nextInt())) % 1000 + 1;
int[] list1 = sortedRandomIntArrayOfLength(length1);
int[] list2 = sortedRandomIntArrayOfLength(length2);
int k = (Math.abs(random.nextInt()) % (length1 + length2)) + 1 ;
int result = findKthSmallestElement(k, list1, list2);
int result2 = getKthElementSorted(list1, list2, k);
int result3 = getKthElementMerge(list1, list2, k);
assertEquals(result2, result);
assertEquals(result2, result3);
}
private int[] sortedRandomIntArrayOfLength(int length) {
int[] intArray = new Random().ints(length).toArray();
Arrays.sort(intArray);
return intArray;
}
}

View File

@ -3,9 +3,11 @@
This module contains articles about Apache POI This module contains articles about Apache POI
### Relevant Articles: ### Relevant Articles:
- [Microsoft Word Processing in Java with Apache POI](https://www.baeldung.com/java-microsoft-word-with-apache-poi) - [Microsoft Word Processing in Java with Apache POI](https://www.baeldung.com/java-microsoft-word-with-apache-poi)
- [Working with Microsoft Excel in Java](https://www.baeldung.com/java-microsoft-excel) - [Working with Microsoft Excel in Java](https://www.baeldung.com/java-microsoft-excel)
- [Creating a MS PowerPoint Presentation in Java](https://www.baeldung.com/apache-poi-slideshow) - [Creating a MS PowerPoint Presentation in Java](https://www.baeldung.com/apache-poi-slideshow)
- [Merge Cells in Excel Using Apache POI](https://www.baeldung.com/java-apache-poi-merge-cells) - [Merge Cells in Excel Using Apache POI](https://www.baeldung.com/java-apache-poi-merge-cells)
- [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)

View File

@ -9,3 +9,4 @@ This module contains articles about Java 10 core features
- [Copy a List to Another List in Java](http://www.baeldung.com/java-copy-list-to-another) - [Copy a List to Another List in Java](http://www.baeldung.com/java-copy-list-to-another)
- [Deep Dive Into the New Java JIT Compiler Graal](https://www.baeldung.com/graal-java-jit-compiler) - [Deep Dive Into the New Java JIT Compiler Graal](https://www.baeldung.com/graal-java-jit-compiler)
- [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)

View File

@ -1,22 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project <project
xmlns="http://maven.apache.org/POM/4.0.0" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"> 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> <modelVersion>4.0.0</modelVersion>
<artifactId>core-java-10</artifactId> <artifactId>core-java-10</artifactId>
<version>0.1.0-SNAPSHOT</version> <version>0.1.0-SNAPSHOT</version>
<name>core-java-10</name> <name>core-java-10</name>
<packaging>jar</packaging> <packaging>jar</packaging>
<url>http://maven.apache.org</url>
<parent> <parent>
<groupId>com.baeldung</groupId> <groupId>com.baeldung.core-java-modules</groupId>
<artifactId>parent-modules</artifactId> <artifactId>core-java-modules</artifactId>
<version>1.0.0-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<relativePath>../../</relativePath> <relativePath>../</relativePath>
</parent> </parent>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons-collections4.version}</version>
</dependency>
</dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
@ -34,6 +41,7 @@
<properties> <properties>
<maven.compiler.source.version>10</maven.compiler.source.version> <maven.compiler.source.version>10</maven.compiler.source.version>
<maven.compiler.target.version>10</maven.compiler.target.version> <maven.compiler.target.version>10</maven.compiler.target.version>
<commons-collections4.version>4.1</commons-collections4.version>
</properties> </properties>
</project> </project>

View File

@ -0,0 +1,68 @@
package com.baeldung.java10.collections.conversion;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.collections4.CollectionUtils;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ListSetConversionUnitTest {
// Set -> List; List -> Set
@Test
public final void givenUsingCoreJava_whenSetConvertedToList_thenCorrect() {
final Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
final List<Integer> targetList = new ArrayList<>(sourceSet);
}
@Test
public final void givenUsingCoreJava_whenListConvertedToSet_thenCorrect() {
final List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
final Set<Integer> targetSet = new HashSet<>(sourceList);
}
@Test
public void givenUsingJava10_whenSetConvertedToList_thenCorrect() {
final Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
final List<Integer> targetList = List.copyOf(sourceSet);
}
@Test
public void givenUsingJava10_whenListConvertedToSet_thenCorrect() {
final List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
final Set<Integer> targetSet = Set.copyOf(sourceList);
}
@Test
public final void givenUsingGuava_whenSetConvertedToList_thenCorrect() {
final Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
final List<Integer> targetList = Lists.newArrayList(sourceSet);
}
@Test
public final void givenUsingGuava_whenListConvertedToSet_thenCorrect() {
final List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
final Set<Integer> targetSet = Sets.newHashSet(sourceList);
}
@Test
public final void givenUsingCommonsCollections_whenListConvertedToSet_thenCorrect() {
final List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
final Set<Integer> targetSet = new HashSet<>(6);
CollectionUtils.addAll(targetSet, sourceList);
}
@Test
public final void givenUsingCommonsCollections_whenSetConvertedToList_thenCorrect() {
final Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
final List<Integer> targetList = new ArrayList<>(6);
CollectionUtils.addAll(targetList, sourceSet);
}
}

View File

@ -31,6 +31,6 @@ public class UseDateTimeFormatterUnitTest {
public void givenALocalDate_whenFormattingWithStyleAndLocale_thenPass() { public void givenALocalDate_whenFormattingWithStyleAndLocale_thenPass() {
String result = subject.formatWithStyleAndLocale(localDateTime, FormatStyle.MEDIUM, Locale.UK); String result = subject.formatWithStyleAndLocale(localDateTime, FormatStyle.MEDIUM, Locale.UK);
assertThat(result).isEqualTo("25 Jan 2015, 06:30:00"); assertThat(result).isEqualTo("25-Jan-2015 06:30:00");
} }
} }

View File

@ -3,6 +3,7 @@ package com.baeldung.datetime;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
@ -24,10 +25,11 @@ public class UseToInstantUnitTest {
@Test @Test
public void givenADate_whenConvertingToLocalDate_thenAsExpected() { public void givenADate_whenConvertingToLocalDate_thenAsExpected() {
Date givenDate = new Date(1465817690000L); LocalDateTime currentDateTime = LocalDateTime.now();
Date givenDate = Date.from(currentDateTime.atZone(ZoneId.systemDefault()).toInstant());
LocalDateTime localDateTime = subject.convertDateToLocalDate(givenDate); LocalDateTime localDateTime = subject.convertDateToLocalDate(givenDate);
assertThat(localDateTime).isEqualTo("2016-06-13T13:34:50"); assertThat(localDateTime).isEqualTo(currentDateTime);
} }
} }

View File

@ -54,7 +54,7 @@ public class UseZonedDateTimeUnitTest {
@Test @Test
public void givenAStringWithTimeZone_whenParsing_thenEqualsExpected() { public void givenAStringWithTimeZone_whenParsing_thenEqualsExpected() {
ZonedDateTime resultFromString = zonedDateTime.getZonedDateTimeUsingParseMethod("2015-05-03T10:15:30+01:00[Europe/Paris]"); ZonedDateTime resultFromString = zonedDateTime.getZonedDateTimeUsingParseMethod("2015-05-03T10:15:30+01:00[Europe/Paris]");
ZonedDateTime resultFromLocalDateTime = ZonedDateTime.of(2015, 5, 3, 11, 15, 30, 0, ZoneId.of("Europe/Paris")); ZonedDateTime resultFromLocalDateTime = ZonedDateTime.of(2015, 5, 3, 10, 15, 30, 0, ZoneId.of("Europe/Paris"));
assertThat(resultFromString.getZone()).isEqualTo(ZoneId.of("Europe/Paris")); assertThat(resultFromString.getZone()).isEqualTo(ZoneId.of("Europe/Paris"));
assertThat(resultFromLocalDateTime.getZone()).isEqualTo(ZoneId.of("Europe/Paris")); assertThat(resultFromLocalDateTime.getZone()).isEqualTo(ZoneId.of("Europe/Paris"));

View File

@ -3,7 +3,9 @@
This module contains articles about advanced operations on arrays in Java. They assume some background knowledge with arrays in Java. This module contains articles about advanced operations on arrays in Java. They assume some background knowledge with arrays in Java.
### Relevant Articles: ### Relevant Articles:
- [How to Copy an Array in Java](https://www.baeldung.com/java-array-copy) - [How to Copy an Array in Java](https://www.baeldung.com/java-array-copy)
- [Arrays.deepEquals](https://www.baeldung.com/java-arrays-deepequals) - [Arrays.deepEquals](https://www.baeldung.com/java-arrays-deepequals)
- [Find Sum and Average in a Java Array](https://www.baeldung.com/java-array-sum-average) - [Find Sum and Average in a Java Array](https://www.baeldung.com/java-array-sum-average)
- [Intersection Between two Integer Arrays](https://www.baeldung.com/java-array-intersection) - [Intersection Between two Integer Arrays](https://www.baeldung.com/java-array-intersection)
- [Comparing Arrays in Java](https://www.baeldung.com/java-comparing-arrays)

View File

@ -5,7 +5,16 @@ import org.apache.commons.lang3.ArrayUtils;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
@ -138,7 +147,7 @@ public class JavaSortingUnitTest {
HashSet<Integer> descSortedIntegersSet = new LinkedHashSet<>(Arrays.asList(255, 200, 123, 89, 88, 66, 7, 5, 1)); HashSet<Integer> descSortedIntegersSet = new LinkedHashSet<>(Arrays.asList(255, 200, 123, 89, 88, 66, 7, 5, 1));
ArrayList<Integer> list = new ArrayList<>(integersSet); ArrayList<Integer> list = new ArrayList<>(integersSet);
list.sort((i1, i2) -> i2 - i1); list.sort(Comparator.reverseOrder());
integersSet = new LinkedHashSet<>(list); integersSet = new LinkedHashSet<>(list);
assertTrue(Arrays.equals(integersSet.toArray(), descSortedIntegersSet.toArray())); assertTrue(Arrays.equals(integersSet.toArray(), descSortedIntegersSet.toArray()));

View File

@ -12,3 +12,4 @@
- [Fail-Safe Iterator vs Fail-Fast Iterator](https://www.baeldung.com/java-fail-safe-vs-fail-fast-iterator) - [Fail-Safe Iterator vs Fail-Fast Iterator](https://www.baeldung.com/java-fail-safe-vs-fail-fast-iterator)
- [Quick Guide to the Java Stack](https://www.baeldung.com/java-stack) - [Quick Guide to the Java Stack](https://www.baeldung.com/java-stack)
- [Convert an Array of Primitives to a List](https://www.baeldung.com/java-primitive-array-to-list) - [Convert an Array of Primitives to a List](https://www.baeldung.com/java-primitive-array-to-list)
- [A Guide to BitSet in Java](https://www.baeldung.com/java-bitset)

View File

@ -10,4 +10,5 @@ This module contains articles about the Java List collection
- [Performance Comparison of Primitive Lists in Java](https://www.baeldung.com/java-list-primitive-performance) - [Performance Comparison of Primitive Lists in Java](https://www.baeldung.com/java-list-primitive-performance)
- [Filtering a Java Collection by a List](https://www.baeldung.com/java-filter-collection-by-list) - [Filtering a Java Collection by a List](https://www.baeldung.com/java-filter-collection-by-list)
- [How to Count Duplicate Elements in Arraylist](https://www.baeldung.com/java-count-duplicate-elements-arraylist) - [How to Count Duplicate Elements in Arraylist](https://www.baeldung.com/java-count-duplicate-elements-arraylist)
- [Finding the Differences Between Two Lists in Java](https://www.baeldung.com/java-lists-difference)
- [[<-- Prev]](/core-java-modules/core-java-collections-list-2) - [[<-- Prev]](/core-java-modules/core-java-collections-list-2)

View File

@ -21,20 +21,15 @@
<version>${eclipse-collections.version}</version> <version>${eclipse-collections.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.sf.trove4j</groupId> <groupId>com.carrotsearch</groupId>
<artifactId>trove4j</artifactId> <artifactId>hppc</artifactId>
<version>${trove4j.version}</version> <version>${hppc.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>it.unimi.dsi</groupId> <groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId> <artifactId>fastutil</artifactId>
<version>${fastutil.version}</version> <version>${fastutil.version}</version>
</dependency> </dependency>
<dependency>
<groupId>colt</groupId>
<artifactId>colt</artifactId>
<version>${colt.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
@ -69,9 +64,8 @@
<commons-collections4.version>4.1</commons-collections4.version> <commons-collections4.version>4.1</commons-collections4.version>
<avaitility.version>1.7.0</avaitility.version> <avaitility.version>1.7.0</avaitility.version>
<eclipse-collections.version>8.2.0</eclipse-collections.version> <eclipse-collections.version>8.2.0</eclipse-collections.version>
<trove4j.version>3.0.2</trove4j.version> <hppc.version>0.7.2</hppc.version>
<fastutil.version>8.1.0</fastutil.version> <fastutil.version>8.1.0</fastutil.version>
<colt.version>1.2.0</colt.version>
<assertj.version>3.11.1</assertj.version> <assertj.version>3.11.1</assertj.version>
</properties> </properties>

View File

@ -1,29 +1,68 @@
package com.baeldung.map.primitives; package com.baeldung.map.primitives;
import cern.colt.map.AbstractIntDoubleMap; import com.carrotsearch.hppc.IntLongHashMap;
import cern.colt.map.OpenIntDoubleHashMap; import com.carrotsearch.hppc.IntLongScatterMap;
import gnu.trove.map.TDoubleIntMap; import com.carrotsearch.hppc.IntObjectHashMap;
import gnu.trove.map.hash.TDoubleIntHashMap; import com.carrotsearch.hppc.IntObjectMap;
import com.carrotsearch.hppc.IntObjectScatterMap;
import it.unimi.dsi.fastutil.ints.Int2BooleanMap; import it.unimi.dsi.fastutil.ints.Int2BooleanMap;
import it.unimi.dsi.fastutil.ints.Int2BooleanMaps;
import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap;
import it.unimi.dsi.fastutil.ints.Int2BooleanSortedMap; import it.unimi.dsi.fastutil.ints.Int2BooleanSortedMap;
import it.unimi.dsi.fastutil.ints.Int2BooleanSortedMaps; import it.unimi.dsi.fastutil.ints.Int2BooleanSortedMaps;
import it.unimi.dsi.fastutil.objects.ObjectIterator;
import org.eclipse.collections.api.map.primitive.ImmutableIntIntMap; import org.eclipse.collections.api.map.primitive.ImmutableIntIntMap;
import org.eclipse.collections.api.map.primitive.MutableIntIntMap; import org.eclipse.collections.api.map.primitive.MutableIntIntMap;
import org.eclipse.collections.api.map.primitive.MutableObjectDoubleMap; import org.eclipse.collections.api.map.primitive.MutableObjectDoubleMap;
import org.eclipse.collections.impl.factory.primitive.IntIntMaps; import org.eclipse.collections.impl.factory.primitive.IntIntMaps;
import org.eclipse.collections.impl.factory.primitive.ObjectDoubleMaps; import org.eclipse.collections.impl.factory.primitive.ObjectDoubleMaps;
import static java.lang.String.format;
import java.math.BigDecimal;
public class PrimitiveMaps { public class PrimitiveMaps {
public static void main(String[] args) { public static void main(String[] args) {
hppcMap();
eclipseCollectionsMap(); eclipseCollectionsMap();
troveMap();
coltMap();
fastutilMap(); fastutilMap();
} }
private static void hppcMap() {
//Regular maps
IntLongHashMap intLongHashMap = new IntLongHashMap();
intLongHashMap.put(25,1L);
intLongHashMap.put(150,Long.MAX_VALUE);
intLongHashMap.put(1,0L);
intLongHashMap.get(150);
IntObjectMap<BigDecimal> intObjectMap = new IntObjectHashMap<BigDecimal>();
intObjectMap.put(1, BigDecimal.valueOf(1));
intObjectMap.put(2, BigDecimal.valueOf(2500));
BigDecimal value = intObjectMap.get(2);
//Scatter maps
IntLongScatterMap intLongScatterMap = new IntLongScatterMap();
intLongScatterMap.put(1, 1L);
intLongScatterMap.put(2, -2L);
intLongScatterMap.put(1000,0L);
intLongScatterMap.get(1000);
IntObjectScatterMap<BigDecimal> intObjectScatterMap = new IntObjectScatterMap<BigDecimal>();
intObjectScatterMap.put(1, BigDecimal.valueOf(1));
intObjectScatterMap.put(2, BigDecimal.valueOf(2500));
value = intObjectScatterMap.get(2);
}
private static void fastutilMap() { private static void fastutilMap() {
Int2BooleanMap int2BooleanMap = new Int2BooleanOpenHashMap(); Int2BooleanMap int2BooleanMap = new Int2BooleanOpenHashMap();
int2BooleanMap.put(1, true); int2BooleanMap.put(1, true);
@ -32,13 +71,19 @@ public class PrimitiveMaps {
boolean value = int2BooleanMap.get(1); boolean value = int2BooleanMap.get(1);
Int2BooleanSortedMap int2BooleanSorted = Int2BooleanSortedMaps.EMPTY_MAP; //Lambda style iteration
} Int2BooleanMaps.fastForEach(int2BooleanMap, entry -> {
System.out.println(String.format("Key: %d, Value: %b",entry.getIntKey(),entry.getBooleanValue()));
});
//Iterator based loop
ObjectIterator<Int2BooleanMap.Entry> iterator = Int2BooleanMaps.fastIterator(int2BooleanMap);
while(iterator.hasNext()) {
Int2BooleanMap.Entry entry = iterator.next();
System.out.println(String.format("Key: %d, Value: %b",entry.getIntKey(),entry.getBooleanValue()));
}
private static void coltMap() {
AbstractIntDoubleMap map = new OpenIntDoubleHashMap();
map.put(1, 4.5);
double value = map.get(1);
} }
private static void eclipseCollectionsMap() { private static void eclipseCollectionsMap() {
@ -53,17 +98,5 @@ public class PrimitiveMaps {
dObject.addToValue("stability", 0.8); dObject.addToValue("stability", 0.8);
} }
private static void troveMap() {
double[] doubles = new double[] {1.2, 4.5, 0.3};
int[] ints = new int[] {1, 4, 0};
TDoubleIntMap doubleIntMap = new TDoubleIntHashMap(doubles, ints);
doubleIntMap.put(1.2, 22);
doubleIntMap.put(4.5, 16);
doubleIntMap.adjustValue(1.2, 1);
doubleIntMap.adjustValue(4.5, 4);
doubleIntMap.adjustValue(0.3, 7);
}
} }

View File

@ -1,5 +1,8 @@
#Core Java Console #Core Java Console
[Read and Write User Input in Java](http://www.baeldung.com/java-console-input-output) ### Relevant Articles:
[Formatting with printf() in Java](https://www.baeldung.com/java-printstream-printf)
[ASCII Art in Java](http://www.baeldung.com/ascii-art-in-java) - [Read and Write User Input in Java](http://www.baeldung.com/java-console-input-output)
- [Formatting with printf() in Java](https://www.baeldung.com/java-printstream-printf)
- [ASCII Art in Java](http://www.baeldung.com/ascii-art-in-java)
- [System.console() vs. System.out](https://www.baeldung.com/java-system-console-vs-system-out)

View File

@ -0,0 +1,3 @@
### Relevant Articles:
- [NoSuchMethodError in Java](https://www.baeldung.com/java-nosuchmethod-error)

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.exceptions</groupId>
<artifactId>core-java-exceptions-3</artifactId>
<version>0.1.0-SNAPSHOT</version>
<name>core-java-exceptions-3</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>
<!-- test scoped -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj-core.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<!-- testing -->
<assertj-core.version>3.10.0</assertj-core.version>
</properties>
</project>

View File

@ -0,0 +1,11 @@
package com.baeldung.exceptions.nosuchmethoderror;
public class MainMenu {
public static void main(String[] args) {
System.out.println("Today's Specials: " + getSpecials());
}
public static String getSpecials() {
return SpecialToday.getDesert();
}
}

View File

@ -0,0 +1,8 @@
package com.baeldung.exceptions.nosuchmethoderror;
public class SpecialToday {
private static String desert = "Chocolate Cake";
public static String getDesert() {
return desert;
}
}

View File

@ -0,0 +1,13 @@
package com.baeldung.exceptions.nosuchmethoderror;
import static org.junit.Assert.assertNotNull;
import org.junit.jupiter.api.Test;
class MainMenuUnitTest {
@Test
void whenGetSpecials_thenNotNull() {
assertNotNull(MainMenu.getSpecials());
}
}

View File

@ -6,4 +6,7 @@ This module contains articles about core Java input and output (IO)
- [Java Create a File](https://www.baeldung.com/java-how-to-create-a-file) - [Java Create a File](https://www.baeldung.com/java-how-to-create-a-file)
- [Check If a Directory Is Empty in Java](https://www.baeldung.com/java-check-empty-directory) - [Check If a Directory Is Empty in Java](https://www.baeldung.com/java-check-empty-directory)
- [Check If a File or Directory Exists in Java](https://www.baeldung.com/java-file-directory-exists)
- [Copy a Directory in Java](https://www.baeldung.com/java-copy-directory)
- [Java Files Open Options](https://www.baeldung.com/java-file-options)
- [[<-- Prev]](/core-java-modules/core-java-io-2) - [[<-- Prev]](/core-java-modules/core-java-io-2)

View File

@ -0,0 +1,82 @@
package com.baeldung.linenumber;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
public class LineAtGivenNumberUnitTest {
private static final String FILE_PATH = "src/test/resources/linesInput.txt";
@Test
public void givenFile_whenUsingBufferedReader_thenExtractedLineIsCorrect() throws IOException {
try (BufferedReader br = Files.newBufferedReader(Paths.get(FILE_PATH))) {
for (int i = 0; i < 3; i++) {
br.readLine();
}
String extractedLine = br.readLine();
assertEquals("Line 4", extractedLine);
}
}
@Test
public void givenFile_whenUsingScanner_thenExtractedLineIsCorrect() throws IOException {
try (Scanner scanner = new Scanner(new File(FILE_PATH))) {
for (int i = 0; i < 3; i++) {
scanner.nextLine();
}
String extractedLine = scanner.nextLine();
assertEquals("Line 4", extractedLine);
}
}
@Test
public void givenSmallFile_whenUsingFilesAPI_thenExtractedLineIsCorrect() throws IOException {
String extractedLine = Files.readAllLines(Paths.get(FILE_PATH)).get(4);
assertEquals("Line 5", extractedLine);
}
@Test
public void givenLargeFile_whenUsingFilesAPI_thenExtractedLineIsCorrect() throws IOException {
try (Stream<String> lines = Files.lines(Paths.get(FILE_PATH))) {
String extractedLine = lines.skip(4).findFirst().get();
assertEquals("Line 5", extractedLine);
}
}
@Test
public void givenFile_whenUsingFileUtils_thenExtractedLineIsCorrect() throws IOException {
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("linesInput.txt").getFile());
List<String> lines = FileUtils.readLines(file, "UTF-8");
String extractedLine = lines.get(0);
assertEquals("Line 1", extractedLine);
}
@Test
public void givenFile_whenUsingIOUtils_thenExtractedLineIsCorrect() throws IOException {
String fileContent = IOUtils.toString(new FileInputStream(FILE_PATH), StandardCharsets.UTF_8);
String extractedLine = fileContent.split(System.lineSeparator())[0];
assertEquals("Line 1", extractedLine);
}
}

View File

@ -0,0 +1,5 @@
Line 1
Line 2
Line 3
Line 4
Line 5

View File

@ -10,4 +10,5 @@ This module contains articles about working with the Java Virtual Machine (JVM).
- [boolean and boolean[] Memory Layout in the JVM](https://www.baeldung.com/jvm-boolean-memory-layout) - [boolean and boolean[] Memory Layout in the JVM](https://www.baeldung.com/jvm-boolean-memory-layout)
- [Where Is the Array Length Stored in JVM?](https://www.baeldung.com/java-jvm-array-length) - [Where Is the Array Length Stored in JVM?](https://www.baeldung.com/java-jvm-array-length)
- [Memory Address of Objects in Java](https://www.baeldung.com/java-object-memory-address) - [Memory Address of Objects in Java](https://www.baeldung.com/java-object-memory-address)
- [List All Classes Loaded in a Specific Class Loader](https://www.baeldung.com/java-list-classes-class-loader)
- More articles: [[<-- prev]](/core-java-modules/core-java-jvm) - More articles: [[<-- prev]](/core-java-modules/core-java-jvm)

View File

@ -0,0 +1,19 @@
package com.baeldung.loadedclasslisting;
import java.util.Arrays;
public class Launcher {
public static void main(String[] args) {
printClassesLoadedBy("BOOTSTRAP");
printClassesLoadedBy("SYSTEM");
printClassesLoadedBy("EXTENSION");
}
private static void printClassesLoadedBy(String classLoaderType) {
System.out.println(classLoaderType + " ClassLoader : ");
Class<?>[] classes = ListLoadedClassesAgent.listLoadedClasses(classLoaderType);
Arrays.asList(classes)
.forEach(clazz -> System.out.println(clazz.getCanonicalName()));
}
}

View File

@ -0,0 +1,40 @@
package com.baeldung.loadedclasslisting;
import java.lang.instrument.Instrumentation;
public class ListLoadedClassesAgent {
private static Instrumentation instrumentation;
public static void premain(String agentArgs, Instrumentation instrumentation) {
ListLoadedClassesAgent.instrumentation = instrumentation;
}
public static Class<?>[] listLoadedClasses(String classLoaderType) {
if (instrumentation == null) {
throw new IllegalStateException(
"ListLoadedClassesAgent is not initialized.");
}
return instrumentation.getInitiatedClasses(
getClassLoader(classLoaderType));
}
private static ClassLoader getClassLoader(String classLoaderType) {
ClassLoader classLoader = null;
switch (classLoaderType) {
case "SYSTEM":
classLoader = ClassLoader.getSystemClassLoader();
break;
case "EXTENSION":
classLoader = ClassLoader.getSystemClassLoader().getParent();
break;
// passing a null value to the Instrumentation : getInitiatedClasses method
// defaults to the bootstrap class loader
case "BOOTSTRAP":
break;
default:
break;
}
return classLoader;
}
}

View File

@ -0,0 +1 @@
Premain-Class: com.baeldung.loadedclasslisting.ListLoadedClassesAgent

View File

@ -37,7 +37,7 @@ public class Human {
public static int compareByNameThenAge(final Human lhs, final Human rhs) { public static int compareByNameThenAge(final Human lhs, final Human rhs) {
if (lhs.name.equals(rhs.name)) { if (lhs.name.equals(rhs.name)) {
return lhs.age - rhs.age; return Integer.compare(lhs.age, rhs.age);
} else { } else {
return lhs.name.compareTo(rhs.name); return lhs.name.compareTo(rhs.name);
} }

View File

@ -6,8 +6,11 @@ public interface Bar {
String method(String string); String method(String string);
default String defaultMethod() { default String defaultBar() {
return "String from Bar"; return "Default String from Bar";
} }
default String defaultCommon() {
return "Default Common from Bar";
}
} }

View File

@ -6,7 +6,11 @@ public interface Baz {
String method(String string); String method(String string);
default String defaultMethod() { default String defaultBaz() {
return "String from Baz"; return "Default String from Baz";
}
default String defaultCommon(){
return "Default Common from Baz";
} }
} }

View File

@ -5,8 +5,7 @@ package com.baeldung.java8.lambda.tips;
public interface FooExtended extends Baz, Bar { public interface FooExtended extends Baz, Bar {
@Override @Override
default String defaultMethod() { default String defaultCommon() {
return Bar.super.defaultMethod(); return Bar.super.defaultCommon();
} }
} }

View File

@ -54,7 +54,7 @@ public class Java8SortUnitTest {
final List<Human> humans = Lists.newArrayList(new Human("Sarah", 12), new Human("Sarah", 10), new Human("Zack", 12)); final List<Human> humans = Lists.newArrayList(new Human("Sarah", 12), new Human("Sarah", 10), new Human("Zack", 12));
humans.sort((lhs, rhs) -> { humans.sort((lhs, rhs) -> {
if (lhs.getName().equals(rhs.getName())) { if (lhs.getName().equals(rhs.getName())) {
return lhs.getAge() - rhs.getAge(); return Integer.compare(lhs.getAge(), rhs.getAge());
} else { } else {
return lhs.getName().compareTo(rhs.getName()); return lhs.getName().compareTo(rhs.getName());
} }

View File

@ -39,9 +39,9 @@ public class Java8FunctionalInteracesLambdasUnitTest {
@Test @Test
public void defaultMethodFromExtendedInterface_whenReturnDefiniteString_thenCorrect() { public void defaultMethodFromExtendedInterface_whenReturnDefiniteString_thenCorrect() {
final FooExtended fooExtended = string -> string; final FooExtended fooExtended = string -> string;
final String result = fooExtended.defaultMethod(); final String result = fooExtended.defaultCommon();
assertEquals("String from Bar", result); assertEquals("Default Common from Bar", result);
} }
@Test @Test

View File

@ -4,4 +4,5 @@ This module contains articles about core features in the Java language
- [Class.isInstance vs Class.isAssignableFrom](https://www.baeldung.com/java-isinstance-isassignablefrom) - [Class.isInstance vs Class.isAssignableFrom](https://www.baeldung.com/java-isinstance-isassignablefrom)
- [Converting a Java String Into a Boolean](https://www.baeldung.com/java-string-to-boolean) - [Converting a Java String Into a Boolean](https://www.baeldung.com/java-string-to-boolean)
- [When are Static Variables Initialized in Java?](https://www.baeldung.com/java-static-variables-initialization)
- [[<-- Prev]](/core-java-modules/core-java-lang-2) - [[<-- Prev]](/core-java-modules/core-java-lang-2)

View File

@ -3,6 +3,7 @@
This module contains articles about types in Java This module contains articles about types in Java
### Relevant Articles: ### Relevant Articles:
- [Java Classes and Objects](https://www.baeldung.com/java-classes-objects) - [Java Classes and Objects](https://www.baeldung.com/java-classes-objects)
- [Guide to the this Java Keyword](https://www.baeldung.com/java-this) - [Guide to the this Java Keyword](https://www.baeldung.com/java-this)
- [Nested Classes in Java](https://www.baeldung.com/java-nested-classes) - [Nested Classes in Java](https://www.baeldung.com/java-nested-classes)
@ -10,3 +11,4 @@ This module contains articles about types in Java
- [Iterating Over Enum Values in Java](https://www.baeldung.com/java-enum-iteration) - [Iterating Over Enum Values in Java](https://www.baeldung.com/java-enum-iteration)
- [Attaching Values to Java Enum](https://www.baeldung.com/java-enum-values) - [Attaching Values to Java Enum](https://www.baeldung.com/java-enum-values)
- [A Guide to Java Enums](https://www.baeldung.com/a-guide-to-java-enums) - [A Guide to Java Enums](https://www.baeldung.com/a-guide-to-java-enums)
- [Determine if an Object is of Primitive Type](https://www.baeldung.com/java-object-primitive-type)

View File

@ -45,7 +45,7 @@ public class Player implements Comparable<Player> {
@Override @Override
public int compareTo(Player otherPlayer) { public int compareTo(Player otherPlayer) {
return (this.getRanking() - otherPlayer.getRanking()); return Integer.compare(getRanking(), otherPlayer.getRanking());
} }
} }

View File

@ -6,7 +6,7 @@ public class PlayerAgeComparator implements Comparator<Player> {
@Override @Override
public int compare(Player firstPlayer, Player secondPlayer) { public int compare(Player firstPlayer, Player secondPlayer) {
return (firstPlayer.getAge() - secondPlayer.getAge()); return Integer.compare(firstPlayer.getAge(), secondPlayer.getAge());
} }
} }

View File

@ -6,7 +6,7 @@ public class PlayerRankingComparator implements Comparator<Player> {
@Override @Override
public int compare(Player firstPlayer, Player secondPlayer) { public int compare(Player firstPlayer, Player secondPlayer) {
return (firstPlayer.getRanking() - secondPlayer.getRanking()); return Integer.compare(firstPlayer.getRanking(), secondPlayer.getRanking());
} }
} }

View File

@ -0,0 +1,26 @@
package com.baeldung.comparator;
import org.junit.Test;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class AvoidingSubtractionUnitTest {
@Test
public void givenTwoPlayers_whenUsingSubtraction_thenOverflow() {
Comparator<Player> comparator = (p1, p2) -> p1.getRanking() - p2.getRanking();
Player player1 = new Player(59, "John", Integer.MAX_VALUE);
Player player2 = new Player(67, "Roger", -1);
List<Player> players = Arrays.asList(player1, player2);
players.sort(comparator);
System.out.println(players);
assertEquals("John", players.get(0).getName());
assertEquals("Roger", players.get(1).getName());
}
}

View File

@ -1,14 +1,14 @@
package com.baeldung.comparator; package com.baeldung.comparator;
import static org.junit.Assert.assertEquals; import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import org.junit.Before; import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class Java8ComparatorUnitTest { public class Java8ComparatorUnitTest {
@ -28,7 +28,7 @@ public class Java8ComparatorUnitTest {
@Test @Test
public void whenComparing_UsingLambda_thenSorted() { public void whenComparing_UsingLambda_thenSorted() {
System.out.println("************** Java 8 Comaparator **************"); System.out.println("************** Java 8 Comaparator **************");
Comparator<Player> byRanking = (Player player1, Player player2) -> player1.getRanking() - player2.getRanking(); Comparator<Player> byRanking = (Player player1, Player player2) -> Integer.compare(player1.getRanking(), player2.getRanking());
System.out.println("Before Sorting : " + footballTeam); System.out.println("Before Sorting : " + footballTeam);
Collections.sort(footballTeam, byRanking); Collections.sort(footballTeam, byRanking);

View File

@ -12,5 +12,6 @@ This module contains articles about working with the operating system (OS) in Ja
- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java) - [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java)
- [Pattern Search with Grep in Java](http://www.baeldung.com/grep-in-java) - [Pattern Search with Grep in Java](http://www.baeldung.com/grep-in-java)
- [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java) - [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java)
- [Taking Screenshots Using Java](https://www.baeldung.com/java-taking-screenshots)
This module uses Java 9, so make sure to have the JDK 9 installed to run it. This module uses Java 9, so make sure to have the JDK 9 installed to run it.

View File

@ -1,3 +1,4 @@
### Relevant Articles: ### Relevant Articles:
- [Reading the Value of private Fields from a Different Class in Java](https://www.baeldung.com/java-reflection-read-private-field-value) - [Reading the Value of private Fields from a Different Class in Java](https://www.baeldung.com/java-reflection-read-private-field-value)
- [Set Field Value With Reflection](https://www.baeldung.com/java-set-private-field-value)

View File

@ -1,13 +1,13 @@
## Core Java Cookbooks and Examples ## Core Java Cookbooks and Examples
### Relevant Articles: ### Relevant Articles:
[Getting Started with Java Properties](http://www.baeldung.com/java-properties) - [Getting Started with Java Properties](http://www.baeldung.com/java-properties)
[Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) - [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency)
[Introduction to Java Serialization](http://www.baeldung.com/java-serialization) - [Introduction to Java Serialization](http://www.baeldung.com/java-serialization)
[Guide to UUID in Java](http://www.baeldung.com/java-uuid) - [Guide to UUID in Java](http://www.baeldung.com/java-uuid)
[Compiling Java *.class Files with javac](http://www.baeldung.com/javac) - [Compiling Java *.class Files with javac](http://www.baeldung.com/javac)
[Introduction to Javadoc](http://www.baeldung.com/javadoc) - [Introduction to Javadoc](http://www.baeldung.com/javadoc)
[Guide to the Externalizable Interface in Java](http://www.baeldung.com/java-externalizable) - [Guide to the Externalizable Interface in Java](http://www.baeldung.com/java-externalizable)
[What is the serialVersionUID?](http://www.baeldung.com/java-serial-version-uid) - [What is the serialVersionUID?](http://www.baeldung.com/java-serial-version-uid)
[A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle) - [A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle)
[Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) - [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties)

View File

@ -22,6 +22,7 @@
<!-- <module>core-java-11</module> --> <!-- We haven't upgraded to java 11. Fixing in BAEL-10841 --> <!-- <module>core-java-11</module> --> <!-- We haven't upgraded to java 11. Fixing in BAEL-10841 -->
<!-- <module>core-java-12</module> --> <!-- We haven't upgraded to java 12. Fixing in BAEL-10841 --> <!-- <module>core-java-12</module> --> <!-- We haven't upgraded to java 12. Fixing in BAEL-10841 -->
<!-- <module>core-java-13</module> --> <!-- We haven't upgraded to java 12. Fixing in BAEL-10841 --> <!-- <module>core-java-13</module> --> <!-- We haven't upgraded to java 12. Fixing in BAEL-10841 -->
<!-- <module>core-java-14</module> --> <!-- We haven't upgraded to java 14.-->
<module>core-java-8</module> <module>core-java-8</module>
<module>core-java-8-2</module> <module>core-java-8-2</module>
@ -59,15 +60,20 @@
<module>core-java-concurrency-basic</module> <module>core-java-concurrency-basic</module>
<module>core-java-concurrency-basic-2</module> <module>core-java-concurrency-basic-2</module>
<module>core-java-concurrency-collections</module> <module>core-java-concurrency-collections</module>
<module>core-java-concurrency-collections-2</module>
<module>core-java-console</module>
<!--<module>core-java-8-datetime</module>--> <!-- unit test case failure -->
<module>core-java-8-datetime-2</module>
<!-- <module>core-java-date-operations-1</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> <!-- <module>core-java-date-operations-1</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<module>core-java-date-operations-2</module> <module>core-java-date-operations-2</module>
<!-- We haven't upgraded to java 9. --> <!-- We haven't upgraded to java 9. -->
<!-- <module>core-java-datetime-computations</module> <module>core-java-datetime-conversion</module> <module>core-java-datetime-java8</module> <module>core-java-datetime-string</module> --> <!-- <module>core-java-datetime-computations</module> <module>core-java-datetime-conversion</module> <module>core-java-datetime-java8</module> <module>core-java-datetime-string</module> -->
<module>core-java-8-datetime</module>
<module>core-java-exceptions</module> <module>core-java-exceptions</module>
<module>core-java-exceptions-2</module> <module>core-java-exceptions-2</module>
<module>core-java-exceptions-3</module>
<module>core-java-function</module> <module>core-java-function</module>
<module>core-java-io</module> <module>core-java-io</module>

View File

@ -3,6 +3,7 @@
This module contains articles about Kotlin core features. This module contains articles about Kotlin core features.
### Relevant articles: ### Relevant articles:
- [Introduction to the Kotlin Language](https://www.baeldung.com/kotlin-intro) - [Introduction to the Kotlin Language](https://www.baeldung.com/kotlin-intro)
- [Kotlin Java Interoperability](https://www.baeldung.com/kotlin-java-interoperability) - [Kotlin Java Interoperability](https://www.baeldung.com/kotlin-java-interoperability)
- [Get a Random Number in Kotlin](https://www.baeldung.com/kotlin-random-number) - [Get a Random Number in Kotlin](https://www.baeldung.com/kotlin-random-number)
@ -10,3 +11,4 @@ This module contains articles about Kotlin core features.
- [Kotlin Ternary Conditional Operator](https://www.baeldung.com/kotlin-ternary-operator) - [Kotlin Ternary Conditional Operator](https://www.baeldung.com/kotlin-ternary-operator)
- [Sequences in Kotlin](https://www.baeldung.com/kotlin/sequences) - [Sequences in Kotlin](https://www.baeldung.com/kotlin/sequences)
- [Converting Kotlin Data Class from JSON using GSON](https://www.baeldung.com/kotlin-json-convert-data-class) - [Converting Kotlin Data Class from JSON using GSON](https://www.baeldung.com/kotlin-json-convert-data-class)
- [Exception Handling in Kotlin](https://www.baeldung.com/kotlin/exception-handling)

View File

@ -5,3 +5,4 @@ This module contains articles about Deeplearning4j.
### Relevant Articles: ### Relevant Articles:
- [A Guide to Deeplearning4j](https://www.baeldung.com/deeplearning4j) - [A Guide to Deeplearning4j](https://www.baeldung.com/deeplearning4j)
- [Logistic Regression in Java](https://www.baeldung.com/java-logistic-regression) - [Logistic Regression in Java](https://www.baeldung.com/java-logistic-regression)
- [How to Implement a CNN with Deeplearning4j](https://www.baeldung.com/java-cnn-deeplearning4j)

View File

@ -1,3 +1,4 @@
## Relevant Articles: ## Relevant Articles:
- [Introduction to Docker Compose](https://www.baeldung.com/docker-compose) - [Introduction to Docker Compose](https://www.baeldung.com/docker-compose)
- [Creating Docker Images with Spring Boot](https://www.baeldung.com/spring-boot-docker-images)

View File

@ -1,5 +0,0 @@
## Apache POI
This module contains articles about Apache POI
### Relevant Articles:

View File

@ -3,6 +3,8 @@
This module contains articles about conversions among Collection types and arrays in Java. This module contains articles about conversions among Collection types and arrays in Java.
### Relevant Articles: ### Relevant Articles:
- [Array to String Conversions](https://www.baeldung.com/java-array-to-string) - [Array to String Conversions](https://www.baeldung.com/java-array-to-string)
- [Mapping Lists with ModelMapper](https://www.baeldung.com/java-modelmapper-lists) - [Mapping Lists with ModelMapper](https://www.baeldung.com/java-modelmapper-lists)
- [Converting List to Map With a Custom Supplier](https://www.baeldung.com/list-to-map-supplier)
- More articles: [[<-- prev]](../java-collections-conversions) - More articles: [[<-- prev]](../java-collections-conversions)

View File

@ -0,0 +1,32 @@
package com.baeldung.arrayconversion;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToListConversionUnitTest {
@Test(expected = UnsupportedOperationException.class)
public void givenAnArray_whenConvertingToList_returnUnmodifiableListUnitTest() {
String[] stringArray = new String[] { "A", "B", "C", "D" };
List<String> stringList = Arrays.asList(stringArray);
System.out.println(stringList);
stringList.set(0, "E");
System.out.println(stringList);
System.out.println(Arrays.toString(stringArray));
stringList.add("F");
}
@Test
public void givenAnArray_whenConvertingToList_returnModifiableListUnitTest() {
String[] stringArray = new String[] { "A", "B", "C", "D" };
List<String> stringList = new ArrayList<>(Arrays.asList(stringArray));
System.out.println(stringList);
stringList.set(0, "E");
System.out.println(stringList);
System.out.println(Arrays.toString(stringArray));
stringList.add("F");
}
}

View File

@ -5,7 +5,6 @@ This module contains articles about conversions among Collection types and array
### Relevant Articles: ### Relevant Articles:
- [Converting between an Array and a List in Java](https://www.baeldung.com/convert-array-to-list-and-list-to-array) - [Converting between an Array and a List in Java](https://www.baeldung.com/convert-array-to-list-and-list-to-array)
- [Converting between an Array and a Set in Java](https://www.baeldung.com/convert-array-to-set-and-set-to-array) - [Converting between an Array and a Set in Java](https://www.baeldung.com/convert-array-to-set-and-set-to-array)
- [Converting between a List and a Set in Java](https://www.baeldung.com/convert-list-to-set-and-set-to-list)
- [Convert a Map to an Array, List or Set in Java](https://www.baeldung.com/convert-map-values-to-array-list-set) - [Convert a Map to an Array, List or Set in Java](https://www.baeldung.com/convert-map-values-to-array-list-set)
- [Converting a List to String in Java](https://www.baeldung.com/java-list-to-string) - [Converting a List to String in Java](https://www.baeldung.com/java-list-to-string)
- [How to Convert List to Map in Java](https://www.baeldung.com/java-list-to-map) - [How to Convert List to Map in Java](https://www.baeldung.com/java-list-to-map)

View File

@ -101,42 +101,6 @@ public class JavaCollectionConversionUnitTest {
final int[] primitiveTargetArray = ArrayUtils.toPrimitive(targetArray); final int[] primitiveTargetArray = ArrayUtils.toPrimitive(targetArray);
} }
// Set -> List; List -> Set
public final void givenUsingCoreJava_whenSetConvertedToList_thenCorrect() {
final Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
final List<Integer> targetList = new ArrayList<>(sourceSet);
}
public final void givenUsingCoreJava_whenListConvertedToSet_thenCorrect() {
final List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
final Set<Integer> targetSet = new HashSet<>(sourceList);
}
public final void givenUsingGuava_whenSetConvertedToList_thenCorrect() {
final Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
final List<Integer> targetList = Lists.newArrayList(sourceSet);
}
public final void givenUsingGuava_whenListConvertedToSet_thenCorrect() {
final List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
final Set<Integer> targetSet = Sets.newHashSet(sourceList);
}
public final void givenUsingCommonsCollections_whenListConvertedToSet_thenCorrect() {
final List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
final Set<Integer> targetSet = new HashSet<>(6);
CollectionUtils.addAll(targetSet, sourceList);
}
public final void givenUsingCommonsCollections_whenSetConvertedToList_thenCorrect() {
final Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
final List<Integer> targetList = new ArrayList<>(6);
CollectionUtils.addAll(targetList, sourceSet);
}
// Map (values) -> Array, List, Set // Map (values) -> Array, List, Set
@Test @Test
@ -144,7 +108,7 @@ public class JavaCollectionConversionUnitTest {
final Map<Integer, String> sourceMap = createMap(); final Map<Integer, String> sourceMap = createMap();
final Collection<String> values = sourceMap.values(); final Collection<String> values = sourceMap.values();
final String[] targetArray = values.toArray(new String[values.size()]); final String[] targetArray = values.toArray(new String[0]);
} }
@Test @Test

3
java-numbers-4/README.md Normal file
View File

@ -0,0 +1,3 @@
### Relevant Articles:
- [Probability in Java](https://www.baeldung.com/java-probability)

View File

@ -12,4 +12,4 @@ This module contains articles about Servlets.
- [Jakarta EE Servlet Exception Handling](https://www.baeldung.com/servlet-exceptions) - [Jakarta EE Servlet Exception Handling](https://www.baeldung.com/servlet-exceptions)
- [Context and Servlet Initialization Parameters](https://www.baeldung.com/context-servlet-initialization-param) - [Context and Servlet Initialization Parameters](https://www.baeldung.com/context-servlet-initialization-param)
- [The Difference between getRequestURI and getPathInfo in HttpServletRequest](https://www.baeldung.com/http-servlet-request-requesturi-pathinfo) - [The Difference between getRequestURI and getPathInfo in HttpServletRequest](https://www.baeldung.com/http-servlet-request-requesturi-pathinfo)
- Difference between request.getSession() and request.getSession(true) - [Difference between request.getSession() and request.getSession(true)](https://www.baeldung.com/java-request-getsession)

View File

@ -6,6 +6,8 @@ import com.baeldung.jgit.helper.Helper;
import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* Simple snippet which shows how to add a file to the index * Simple snippet which shows how to add a file to the index
@ -14,6 +16,8 @@ import org.eclipse.jgit.lib.Repository;
*/ */
public class AddFile { public class AddFile {
private static final Logger logger = LoggerFactory.getLogger(AddFile.class);
public static void main(String[] args) throws IOException, GitAPIException { public static void main(String[] args) throws IOException, GitAPIException {
// prepare a new test-repository // prepare a new test-repository
try (Repository repository = Helper.createNewRepository()) { try (Repository repository = Helper.createNewRepository()) {
@ -29,7 +33,7 @@ public class AddFile {
.addFilepattern("testfile") .addFilepattern("testfile")
.call(); .call();
System.out.println("Added file " + myfile + " to repository at " + repository.getDirectory()); logger.debug("Added file " + myfile + " to repository at " + repository.getDirectory());
} }
} }
} }

View File

@ -7,6 +7,8 @@ import com.baeldung.jgit.helper.Helper;
import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* Simple snippet which shows how to commit all files * Simple snippet which shows how to commit all files
@ -15,6 +17,8 @@ import org.eclipse.jgit.lib.Repository;
*/ */
public class CommitAll { public class CommitAll {
private static final Logger logger = LoggerFactory.getLogger(CommitAll.class);
public static void main(String[] args) throws IOException, GitAPIException { public static void main(String[] args) throws IOException, GitAPIException {
// prepare a new test-repository // prepare a new test-repository
try (Repository repository = Helper.createNewRepository()) { try (Repository repository = Helper.createNewRepository()) {
@ -44,7 +48,7 @@ public class CommitAll {
.call(); .call();
System.out.println("Committed all changes to repository at " + repository.getDirectory()); logger.debug("Committed all changes to repository at " + repository.getDirectory());
} }
} }
} }

View File

@ -9,6 +9,8 @@ import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.RevWalk;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* Simple snippet which shows how to create a tag * Simple snippet which shows how to create a tag
@ -17,6 +19,8 @@ import org.eclipse.jgit.revwalk.RevWalk;
*/ */
public class CreateAndDeleteTag { public class CreateAndDeleteTag {
private static final Logger logger = LoggerFactory.getLogger(CreateAndDeleteTag.class);
public static void main(String[] args) throws IOException, GitAPIException { public static void main(String[] args) throws IOException, GitAPIException {
// prepare test-repository // prepare test-repository
try (Repository repository = Helper.openJGitRepository()) { try (Repository repository = Helper.openJGitRepository()) {
@ -26,7 +30,7 @@ public class CreateAndDeleteTag {
// set it on the current HEAD // set it on the current HEAD
Ref tag = git.tag().setName("tag_for_testing").call(); Ref tag = git.tag().setName("tag_for_testing").call();
System.out.println("Created/moved tag " + tag + " to repository at " + repository.getDirectory()); logger.debug("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
// remove the tag again // remove the tag again
git.tagDelete().setTags("tag_for_testing").call(); git.tagDelete().setTags("tag_for_testing").call();
@ -36,14 +40,14 @@ public class CreateAndDeleteTag {
try (RevWalk walk = new RevWalk(repository)) { try (RevWalk walk = new RevWalk(repository)) {
RevCommit commit = walk.parseCommit(id); RevCommit commit = walk.parseCommit(id);
tag = git.tag().setObjectId(commit).setName("tag_for_testing").call(); tag = git.tag().setObjectId(commit).setName("tag_for_testing").call();
System.out.println("Created/moved tag " + tag + " to repository at " + repository.getDirectory()); logger.debug("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
// remove the tag again // remove the tag again
git.tagDelete().setTags("tag_for_testing").call(); git.tagDelete().setTags("tag_for_testing").call();
// create an annotated tag // create an annotated tag
tag = git.tag().setName("tag_for_testing").setAnnotated(true).call(); tag = git.tag().setName("tag_for_testing").setAnnotated(true).call();
System.out.println("Created/moved tag " + tag + " to repository at " + repository.getDirectory()); logger.debug("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
// remove the tag again // remove the tag again
git.tagDelete().setTags("tag_for_testing").call(); git.tagDelete().setTags("tag_for_testing").call();

View File

@ -7,6 +7,9 @@ import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevCommit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* Simple snippet which shows how to get the commit-ids for a file to provide log information. * Simple snippet which shows how to get the commit-ids for a file to provide log information.
* *
@ -14,6 +17,8 @@ import org.eclipse.jgit.revwalk.RevCommit;
*/ */
public class Log { public class Log {
private static final Logger logger = LoggerFactory.getLogger(Log.class);
@SuppressWarnings("unused") @SuppressWarnings("unused")
public static void main(String[] args) throws IOException, GitAPIException { public static void main(String[] args) throws IOException, GitAPIException {
try (Repository repository = Helper.openJGitRepository()) { try (Repository repository = Helper.openJGitRepository()) {
@ -22,30 +27,30 @@ public class Log {
.call(); .call();
int count = 0; int count = 0;
for (RevCommit rev : logs) { for (RevCommit rev : logs) {
//System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */); logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++; count++;
} }
System.out.println("Had " + count + " commits overall on current branch"); logger.debug("Had " + count + " commits overall on current branch");
logs = git.log() logs = git.log()
.add(repository.resolve(git.getRepository().getFullBranch())) .add(repository.resolve(git.getRepository().getFullBranch()))
.call(); .call();
count = 0; count = 0;
for (RevCommit rev : logs) { for (RevCommit rev : logs) {
System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */); logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++; count++;
} }
System.out.println("Had " + count + " commits overall on "+git.getRepository().getFullBranch()); logger.debug("Had " + count + " commits overall on "+git.getRepository().getFullBranch());
logs = git.log() logs = git.log()
.all() .all()
.call(); .call();
count = 0; count = 0;
for (RevCommit rev : logs) { for (RevCommit rev : logs) {
//System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */); logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++; count++;
} }
System.out.println("Had " + count + " commits overall in repository"); logger.debug("Had " + count + " commits overall in repository");
logs = git.log() logs = git.log()
// for all log.all() // for all log.all()
@ -53,10 +58,10 @@ public class Log {
.call(); .call();
count = 0; count = 0;
for (RevCommit rev : logs) { for (RevCommit rev : logs) {
//System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */); logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++; count++;
} }
System.out.println("Had " + count + " commits on README.md"); logger.debug("Had " + count + " commits on README.md");
logs = git.log() logs = git.log()
// for all log.all() // for all log.all()
@ -64,10 +69,10 @@ public class Log {
.call(); .call();
count = 0; count = 0;
for (RevCommit rev : logs) { for (RevCommit rev : logs) {
//System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */); logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++; count++;
} }
System.out.println("Had " + count + " commits on pom.xml"); logger.debug("Had " + count + " commits on pom.xml");
} }
} }
} }

View File

@ -11,7 +11,8 @@ public class PorcelainUnitTest {
CommitAll.main(null); CommitAll.main(null);
CreateAndDeleteTag.main(null); CreateAndDeleteTag.main(null);
Log.main(null); Log.main(null);
} }
} }

View File

@ -6,3 +6,4 @@ This module contains articles about the Java Microbenchmark Harness (JMH).
- [Microbenchmarking with Java](https://www.baeldung.com/java-microbenchmark-harness) - [Microbenchmarking with Java](https://www.baeldung.com/java-microbenchmark-harness)
- [A Guide to False Sharing and @Contended](https://www.baeldung.com/java-false-sharing-contended) - [A Guide to False Sharing and @Contended](https://www.baeldung.com/java-false-sharing-contended)
- [Performance Comparison of boolean[] vs BitSet](https://www.baeldung.com/java-boolean-array-bitset-performance)

View File

@ -3,5 +3,7 @@
This module contains articles about JSON. This module contains articles about JSON.
### Relevant Articles: ### Relevant Articles:
- [Introduction to Jsoniter](https://www.baeldung.com/java-jsoniter) - [Introduction to Jsoniter](https://www.baeldung.com/java-jsoniter)
- [Introduction to Moshi Json](https://www.baeldung.com/java-json-moshi) - [Introduction to Moshi Json](https://www.baeldung.com/java-json-moshi)
- [Hypermedia Serialization With JSON-LD](https://www.baeldung.com/json-linked-data)

View File

@ -5,6 +5,7 @@ This module contains articles about jsoup.
### Relevant Articles: ### Relevant Articles:
- [Parsing HTML in Java with Jsoup](https://www.baeldung.com/java-with-jsoup) - [Parsing HTML in Java with Jsoup](https://www.baeldung.com/java-with-jsoup)
- [How to add proxy support to Jsoup?](https://www.baeldung.com/java-jsoup-proxy) - [How to add proxy support to Jsoup?](https://www.baeldung.com/java-jsoup-proxy)
- [Preserving Line Breaks When Using Jsoup](https://www.baeldung.com/jsoup-line-breaks)
### Build the Project ### Build the Project

View File

@ -32,12 +32,6 @@
<artifactId>pact-jvm-consumer-junit_2.11</artifactId> <artifactId>pact-jvm-consumer-junit_2.11</artifactId>
<version>${pact.version}</version> <version>${pact.version}</version>
<scope>test</scope> <scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor --> <!-- https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor -->
@ -53,10 +47,10 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>one.util</groupId> <groupId>one.util</groupId>
<artifactId>streamex</artifactId> <artifactId>streamex</artifactId>
<version>${streamex.version}</version> <version>${streamex.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.bytebuddy</groupId> <groupId>net.bytebuddy</groupId>

View File

@ -5,8 +5,6 @@ import au.com.dius.pact.consumer.PactProviderRuleMk2;
import au.com.dius.pact.consumer.PactVerification; import au.com.dius.pact.consumer.PactVerification;
import au.com.dius.pact.consumer.dsl.PactDslWithProvider; import au.com.dius.pact.consumer.dsl.PactDslWithProvider;
import au.com.dius.pact.model.RequestResponsePact; import au.com.dius.pact.model.RequestResponsePact;
import org.junit.Ignore;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.springframework.http.HttpEntity; import org.springframework.http.HttpEntity;
@ -28,15 +26,30 @@ public class PactConsumerDrivenContractUnitTest {
@Pact(consumer = "test_consumer") @Pact(consumer = "test_consumer")
public RequestResponsePact createPact(PactDslWithProvider builder) { public RequestResponsePact createPact(PactDslWithProvider builder) {
Map<String, String> headers = new HashMap<String, String>(); Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json"); headers.put("Content-Type", "application/json");
return builder.given("test GET").uponReceiving("GET REQUEST").path("/pact").method("GET").willRespondWith().status(200).headers(headers).body("{\"condition\": true, \"name\": \"tom\"}").given("test POST").uponReceiving("POST REQUEST").method("POST") return builder
.headers(headers).body("{\"name\": \"Michael\"}").path("/pact").willRespondWith().status(201).toPact(); .given("test GET")
.uponReceiving("GET REQUEST")
.path("/pact")
.method("GET")
.willRespondWith()
.status(200)
.headers(headers)
.body("{\"condition\": true, \"name\": \"tom\"}")
.given("test POST")
.uponReceiving("POST REQUEST")
.method("POST")
.headers(headers)
.body("{\"name\": \"Michael\"}")
.path("/pact")
.willRespondWith()
.status(201)
.toPact();
} }
@Test @Test
@Ignore
@PactVerification() @PactVerification()
public void givenGet_whenSendRequest_shouldReturn200WithProperHeaderAndBody() { public void givenGet_whenSendRequest_shouldReturn200WithProperHeaderAndBody() {
// when // when

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<logger name="org.dbunit" level="INFO" />
</configuration>

View File

@ -66,27 +66,29 @@
</file> </file>
</activation> </activation>
</profile> </profile>
<profile>
<id>show-active-profiles</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<version>${help.plugin.version}</version>
<executions>
<execution>
<id>show-profiles</id>
<phase>compile</phase>
<goals>
<goal>active-profiles</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles> </profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<version>${help.plugin.version}</version>
<executions>
<execution>
<id>show-profiles</id>
<phase>compile</phase>
<goals>
<goal>active-profiles</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties> <properties>
<help.plugin.version>3.2.0</help.plugin.version> <help.plugin.version>3.2.0</help.plugin.version>
</properties> </properties>

View File

@ -1,3 +1,3 @@
### Relevant Articles: ### Relevant Articles:
- Optional Dependency in Maven - [Optional Dependency in Maven](https://www.baeldung.com/maven-optional-dependency)

View File

@ -21,6 +21,7 @@
<module>dip</module> <module>dip</module>
<module>cqrs-es</module> <module>cqrs-es</module>
<module>front-controller</module> <module>front-controller</module>
<module>hexagonal-architecture</module>
<module>intercepting-filter</module> <module>intercepting-filter</module>
<module>solid</module> <module>solid</module>
</modules> </modules>

View File

@ -4,3 +4,4 @@
- [Single Responsibility Principle in Java](https://www.baeldung.com/java-single-responsibility-principle) - [Single Responsibility Principle in Java](https://www.baeldung.com/java-single-responsibility-principle)
- [Open/Closed Principle in Java](https://www.baeldung.com/java-open-closed-principle) - [Open/Closed Principle in Java](https://www.baeldung.com/java-open-closed-principle)
- [Interface Segregation Principle in Java](https://www.baeldung.com/java-interface-segregation) - [Interface Segregation Principle in Java](https://www.baeldung.com/java-interface-segregation)
- [Liskov Substitution Principle in Java](https://www.baeldung.com/java-liskov-substitution-principle)

View File

@ -5,6 +5,7 @@ This module contains articles about performance testing.
### Relevant Articles: ### Relevant Articles:
- [Performance of Java Mapping Frameworks](https://www.baeldung.com/java-performance-mapping-frameworks) - [Performance of Java Mapping Frameworks](https://www.baeldung.com/java-performance-mapping-frameworks)
- [Performance Effects of Exceptions in Java](https://www.baeldung.com/java-exceptions-performance)
### Running ### Running

View File

@ -19,27 +19,14 @@
<version>${orika.version}</version> <version>${orika.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.sf.dozer</groupId> <groupId>com.github.dozermapper</groupId>
<artifactId>dozer</artifactId> <artifactId>dozer-core</artifactId>
<version>${dozer.version}</version> <version>${dozer.version}</version>
</dependency> </dependency>
<dependency>
<groupId>io.craftsman</groupId>
<artifactId>dozer-jdk8-support</artifactId>
<version>${dozer-jdk8-support.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.mapstruct</groupId> <groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId> <artifactId>mapstruct</artifactId>
<version>${mapstruct-jdk8.version}</version> <version>${mapstruct.version}</version>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-processor -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct-jdk8.version}</version>
<scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
@ -77,10 +64,15 @@
<source>${javac.target}</source> <source>${javac.target}</source>
<target>${javac.target}</target> <target>${javac.target}</target>
<annotationProcessorPaths> <annotationProcessorPaths>
<path>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>${jmh.version}</version>
</path>
<path> <path>
<groupId>org.mapstruct</groupId> <groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId> <artifactId>mapstruct-processor</artifactId>
<version>${mapstruct-processor.version}</version> <version>${mapstruct.version}</version>
</path> </path>
</annotationProcessorPaths> </annotationProcessorPaths>
</configuration> </configuration>
@ -120,28 +112,16 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<configuration>
<archive>
<manifest>
<mainClass>com.baeldung.performancetests.MappingFrameworksPerformance</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins> </plugins>
<pluginManagement> <pluginManagement>
<plugins> <plugins>
<plugin> <plugin>
<artifactId>maven-clean-plugin</artifactId> <artifactId>maven-clean-plugin</artifactId>
<version>2.5</version> <version>${clean.plugin.version}</version>
</plugin> </plugin>
<plugin> <plugin>
<artifactId>maven-deploy-plugin</artifactId> <artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version> <version>${deploy.plugin.version}</version>
</plugin> </plugin>
<plugin> <plugin>
<artifactId>maven-install-plugin</artifactId> <artifactId>maven-install-plugin</artifactId>
@ -179,19 +159,13 @@
<!-- <!--
JMH version to use with this project. JMH version to use with this project.
--> -->
<jmh.version>1.21</jmh.version> <jmh.version>1.23</jmh.version>
<orika.version>1.5.2</orika.version> <orika.version>1.5.4</orika.version>
<dozer.version>5.5.1</dozer.version> <dozer.version>6.5.0</dozer.version>
<dozer-jdk8-support.version>1.0.2</dozer-jdk8-support.version> <mapstruct.version>1.3.1.Final</mapstruct.version>
<mapstruct-jdk8.version>1.2.0.Final</mapstruct-jdk8.version> <modelmapper.version>2.3.8</modelmapper.version>
<modelmapper.version>1.1.0</modelmapper.version> <jmapper.version>1.6.1.CR2</jmapper.version>
<jmapper.version>1.6.0.1</jmapper.version>
<mapstruct-processor.version>1.2.0.Final</mapstruct-processor.version>
<jmh-core.version>1.21</jmh-core.version>
<jmh-generator.version>1.21</jmh-generator.version>
<maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
<!-- <!--
Java source/target to use for compilation. Java source/target to use for compilation.
--> -->
@ -201,14 +175,16 @@
Name of the benchmark Uber-JAR to generate. Name of the benchmark Uber-JAR to generate.
--> -->
<uberjar.name>benchmarks</uberjar.name> <uberjar.name>benchmarks</uberjar.name>
<compiler.plugin.version>3.1</compiler.plugin.version> <clean.plugin.version>3.1.0</clean.plugin.version>
<shade.plugin.version>2.2</shade.plugin.version> <deploy.plugin.version>3.0.0-M1</deploy.plugin.version>
<install.version>2.5.1</install.version> <compiler.plugin.version>3.8.1</compiler.plugin.version>
<jar.plugin.version>2.4</jar.plugin.version> <shade.plugin.version>3.2.4</shade.plugin.version>
<javadoc.plugin.version>2.9.1</javadoc.plugin.version> <install.version>3.0.0-M1</install.version>
<resources.plugin.version>2.6</resources.plugin.version> <jar.plugin.version>3.2.0</jar.plugin.version>
<site.plugin.version>3.3</site.plugin.version> <javadoc.plugin.version>3.2.0</javadoc.plugin.version>
<source.plugin.version>2.2.1</source.plugin.version> <resources.plugin.version>3.1.0</resources.plugin.version>
<site.plugin.version>3.9.1</site.plugin.version>
<source.plugin.version>3.2.1</source.plugin.version>
<surefire.plugin.version>2.17</surefire.plugin.version> <surefire.plugin.version>2.17</surefire.plugin.version>
</properties> </properties>

View File

@ -2,28 +2,28 @@ package com.baeldung.performancetests.dozer;
import com.baeldung.performancetests.Converter; import com.baeldung.performancetests.Converter;
import com.baeldung.performancetests.model.destination.DestinationCode; import com.baeldung.performancetests.model.destination.DestinationCode;
import com.baeldung.performancetests.model.destination.Order;
import com.baeldung.performancetests.model.source.SourceCode; import com.baeldung.performancetests.model.source.SourceCode;
import com.baeldung.performancetests.model.source.SourceOrder; import com.baeldung.performancetests.model.source.SourceOrder;
import com.baeldung.performancetests.model.destination.Order; import com.github.dozermapper.core.DozerBeanMapperBuilder;
import org.dozer.DozerBeanMapper; import com.github.dozermapper.core.Mapper;
import org.dozer.Mapper;
public class DozerConverter implements Converter { public class DozerConverter implements Converter {
private final Mapper mapper; private final Mapper mapper;
public DozerConverter() { public DozerConverter() {
DozerBeanMapper mapper = new DozerBeanMapper(); this.mapper = DozerBeanMapperBuilder.create()
mapper.addMapping(DozerConverter.class.getResourceAsStream("/dozer-mapping.xml")); .withMappingFiles("dozer-mapping.xml")
this.mapper = mapper; .build();
}
@Override
public Order convert(SourceOrder sourceOrder) {
return mapper.map(sourceOrder,Order.class);
}
@Override
public DestinationCode convert(SourceCode sourceCode) {
return mapper.map(sourceCode, DestinationCode.class);
}
} }
@Override
public Order convert(SourceOrder sourceOrder) {
return mapper.map(sourceOrder, Order.class);
}
@Override
public DestinationCode convert(SourceCode sourceCode) {
return mapper.map(sourceCode, DestinationCode.class);
}
}

View File

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" <mappings xmlns="http://dozermapper.github.io/schema/bean-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping https://dozermapper.github.io/schema/bean-mapping.xsd">
xsi:schemaLocation="http://dozer.sourceforge.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
<configuration> <configuration>
<stop-on-errors>true</stop-on-errors> <stop-on-errors>true</stop-on-errors>

View File

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" <mappings xmlns="http://dozermapper.github.io/schema/bean-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping https://dozermapper.github.io/schema/bean-mapping.xsd">
xsi:schemaLocation="http://dozer.sourceforge.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
<configuration> <configuration>
<stop-on-errors>true</stop-on-errors> <stop-on-errors>true</stop-on-errors>

View File

@ -13,3 +13,4 @@
- [Returning the Generated Keys in JDBC](https://www.baeldung.com/jdbc-returning-generated-keys) - [Returning the Generated Keys in JDBC](https://www.baeldung.com/jdbc-returning-generated-keys)
- [Loading JDBC Drivers](https://www.baeldung.com/java-jdbc-loading-drivers) - [Loading JDBC Drivers](https://www.baeldung.com/java-jdbc-loading-drivers)
- [Difference Between Statement and PreparedStatement](https://www.baeldung.com/java-statement-preparedstatement) - [Difference Between Statement and PreparedStatement](https://www.baeldung.com/java-statement-preparedstatement)
- [Extracting Database Metadata Using JDBC](https://www.baeldung.com/jdbc-database-metadata)

View File

@ -1 +1,3 @@
### Relevant Articles: ### Relevant Articles:
- [Flyway Repair With Spring Boot](https://www.baeldung.com/spring-boot-flyway-repair)

View File

@ -13,3 +13,4 @@ This module contains articles about Hibernate 5. Let's not add more articles her
- [Guide to the Hibernate EntityManager](https://www.baeldung.com/hibernate-entitymanager) - [Guide to the Hibernate EntityManager](https://www.baeldung.com/hibernate-entitymanager)
- [Using c3p0 with Hibernate](https://www.baeldung.com/hibernate-c3p0) - [Using c3p0 with Hibernate](https://www.baeldung.com/hibernate-c3p0)
- [Persist a JSON Object Using Hibernate](https://www.baeldung.com/hibernate-persist-json-object) - [Persist a JSON Object Using Hibernate](https://www.baeldung.com/hibernate-persist-json-object)
- [What Is the Hi/Lo Algorithm?](https://www.baeldung.com/hi-lo-algorithm-hibernate)

View File

@ -0,0 +1,34 @@
package com.baeldung.hibernate.hilo;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class RestaurantOrder {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hilo_sequence_generator")
@GenericGenerator(
name = "hilo_sequence_generator",
strategy = "sequence",
parameters = {
@Parameter(name = "sequence_name", value = "hilo_seqeunce"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "3"),
@Parameter(name = "optimizer", value = "hilo")
}
)
private Long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}

View File

@ -0,0 +1,99 @@
package com.baeldung.hibernate.hilo;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.SessionFactoryBuilder;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Properties;
import static org.junit.Assert.fail;
public class HibernateHiloUnitTest {
private Session session;
@Before
public void init() {
try {
configureLogger();
ServiceRegistry serviceRegistry = configureServiceRegistry();
SessionFactory factory = getSessionFactoryBuilder(serviceRegistry).build();
session = factory.openSession();
} catch (HibernateException | IOException e) {
fail("Failed to initiate Hibernate Session [Exception:" + e.toString() + "]");
}
}
private void configureLogger() {
BasicConfigurator.configure();
LogManager.getLogger("org.hibernate").setLevel(Level.ERROR);
LogManager.getLogger("org.hibernate.id.enhanced.SequenceStructure").setLevel(Level.DEBUG);
LogManager.getLogger("org.hibernate.event.internal.AbstractSaveEventListener").setLevel(Level.DEBUG);
LogManager.getLogger("org.hibernate.SQL").setLevel(Level.DEBUG);
}
private static SessionFactoryBuilder getSessionFactoryBuilder(ServiceRegistry serviceRegistry) {
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
metadataSources.addAnnotatedClass(RestaurantOrder.class);
Metadata metadata = metadataSources.buildMetadata();
return metadata.getSessionFactoryBuilder();
}
private static ServiceRegistry configureServiceRegistry() throws IOException {
Properties properties = getProperties();
return new StandardServiceRegistryBuilder().applySettings(properties)
.build();
}
private static Properties getProperties() throws IOException {
Properties properties = new Properties();
URL propertiesURL = getPropertiesURL();
try (FileInputStream inputStream = new FileInputStream(propertiesURL.getFile())) {
properties.load(inputStream);
}
return properties;
}
private static URL getPropertiesURL() {
return Thread.currentThread()
.getContextClassLoader()
.getResource("hibernate-hilo.properties");
}
@Test
public void givenHiLoAlgorithm_when9EntitiesArePersisted_Then3callsToDBForNextValueShouldBeMade() {
Transaction transaction = session.beginTransaction();
for (int i = 0; i < 9; i++) {
session.persist(new RestaurantOrder());
session.flush();
}
transaction.commit();
}
@After
public void cleanup() {
session.close();
}
}

View File

@ -0,0 +1,10 @@
hibernate.connection.driver_class=org.h2.Driver
hibernate.connection.url=jdbc:h2:mem:hilo_db;DB_CLOSE_DELAY=-1
hibernate.connection.username=sa
hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create-drop
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.acquire_increment=5
hibernate.c3p0.timeout=1800

View File

@ -1,3 +1,7 @@
## JPA in Java ## JPA in Java
This module contains articles about the Java Persistence API (JPA) in Java. This module contains articles about the Java Persistence API (JPA) in Java.
### Relevant Articles:
- [JPA Entity Equality](https://www.baeldung.com/jpa-entity-equality)

View File

@ -19,12 +19,14 @@
<module>core-java-persistence</module> <module>core-java-persistence</module>
<module>deltaspike</module> <module>deltaspike</module>
<module>elasticsearch</module> <module>elasticsearch</module>
<module>flyway</module>
<module>flyway-repair</module> <module>flyway-repair</module>
<module>hbase</module> <module>hbase</module>
<module>hibernate5</module> <module>hibernate5</module>
<module>hibernate-mapping</module> <!-- long running --> <module>hibernate-mapping</module> <!-- long running -->
<module>hibernate-ogm</module> <module>hibernate-ogm</module>
<module>hibernate-annotations</module> <module>hibernate-annotations</module>
<module>hibernate-exceptions</module>
<module>hibernate-libraries</module> <module>hibernate-libraries</module>
<module>hibernate-jpa</module> <module>hibernate-jpa</module>
<module>hibernate-queries</module> <module>hibernate-queries</module>
@ -53,6 +55,7 @@
<module>spring-boot-persistence-mongodb</module> <module>spring-boot-persistence-mongodb</module>
<module>spring-data-cassandra</module> <module>spring-data-cassandra</module>
<module>spring-data-cassandra-reactive</module> <module>spring-data-cassandra-reactive</module>
<module>spring-data-cosmosdb</module>
<module>spring-data-couchbase-2</module> <module>spring-data-couchbase-2</module>
<module>spring-data-dynamodb</module> <module>spring-data-dynamodb</module>
<module>spring-data-eclipselink</module> <module>spring-data-eclipselink</module>
@ -78,6 +81,7 @@
<module>spring-hibernate-5</module> <!-- long running --> <module>spring-hibernate-5</module> <!-- long running -->
<module>spring-hibernate4</module> <module>spring-hibernate4</module>
<module>spring-jpa</module> <module>spring-jpa</module>
<module>spring-jpa-2</module>
<!-- <module>spring-mybatis</module> --> <!-- needs fixing in BAEL-9021 --> <!-- <module>spring-mybatis</module> --> <!-- needs fixing in BAEL-9021 -->
<module>spring-persistence-simple</module> <module>spring-persistence-simple</module>
<module>spring-persistence-simple-2</module> <module>spring-persistence-simple-2</module>

View File

@ -0,0 +1,3 @@
### Relevant Articles:
- [Introduction to Spring Data Azure Cosmos DB](https://www.baeldung.com/spring-data-cosmos-db)

View File

@ -0,0 +1,51 @@
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-data-cosmosdb</artifactId>
<name>spring-data-cosmos-db</name>
<description>tutorial for spring-data-cosmosdb</description>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-boot-2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-boot-2</relativePath>
</parent>
<properties>
<java.version>1.8</java.version>
<cosmodb.version>2.3.0</cosmodb.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>spring-data-cosmosdb</artifactId>
<version>${cosmodb.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,12 @@
package com.baeldung.spring.data.cosmosdb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AzureCosmosDbApplication {
public static void main(String[] args) {
SpringApplication.run(AzureCosmosDbApplication.class, args);
}
}

View File

@ -0,0 +1,37 @@
package com.baeldung.spring.data.cosmosdb.config;
import com.azure.data.cosmos.CosmosKeyCredential;
import com.microsoft.azure.spring.data.cosmosdb.config.AbstractCosmosConfiguration;
import com.microsoft.azure.spring.data.cosmosdb.config.CosmosDBConfig;
import com.microsoft.azure.spring.data.cosmosdb.repository.config.EnableCosmosRepositories;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableCosmosRepositories(basePackages = "com.baeldung.spring.data.cosmosdb.repository")
public class AzureCosmosDbConfiguration extends AbstractCosmosConfiguration {
@Value("${azure.cosmosdb.uri}")
private String uri;
@Value("${azure.cosmosdb.key}")
private String key;
@Value("${azure.cosmosdb.secondaryKey}")
private String secondaryKey;
@Value("${azure.cosmosdb.database}")
private String dbName;
private CosmosKeyCredential cosmosKeyCredential;
@Bean
public CosmosDBConfig getConfig() {
this.cosmosKeyCredential = new CosmosKeyCredential(key);
CosmosDBConfig cosmosdbConfig = CosmosDBConfig.builder(uri, this.cosmosKeyCredential, dbName)
.build();
return cosmosdbConfig;
}
}

View File

@ -0,0 +1,53 @@
package com.baeldung.spring.data.cosmosdb.controller;
import com.baeldung.spring.data.cosmosdb.entity.Product;
import com.baeldung.spring.data.cosmosdb.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/products")
public class ProductController {
private ProductService productService;
@Autowired
public ProductController(ProductService productService) {
this.productService = productService;
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody Product product) {
productService.saveProduct(product);
}
@GetMapping(value = "/{id}/category/{category}")
public Optional<Product> get(@PathVariable String id, @PathVariable String category) {
return productService.findById(id, category);
}
@DeleteMapping(value = "/{id}/category/{category}")
public void delete(@PathVariable String id, @PathVariable String category) {
productService.delete(id, category);
}
@GetMapping
public List<Product> getByName(@RequestParam String name) {
return productService.findProductByName(name);
}
}

View File

@ -0,0 +1,26 @@
package com.baeldung.spring.data.cosmosdb.entity;
import com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document;
import com.microsoft.azure.spring.data.cosmosdb.core.mapping.PartitionKey;
import org.springframework.data.annotation.Id;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Document(collection = "products")
public class Product {
@Id
private String productid;
private String productName;
private double price;
@PartitionKey
private String productCategory;
}

View File

@ -0,0 +1,14 @@
package com.baeldung.spring.data.cosmosdb.repository;
import com.baeldung.spring.data.cosmosdb.entity.Product;
import com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ProductRepository extends CosmosRepository<Product, String> {
List<Product> findByProductName(String productName);
}

View File

@ -0,0 +1,38 @@
package com.baeldung.spring.data.cosmosdb.service;
import com.azure.data.cosmos.PartitionKey;
import com.baeldung.spring.data.cosmosdb.entity.Product;
import com.baeldung.spring.data.cosmosdb.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Optional;
@Component
public class ProductService {
private ProductRepository repository;
@Autowired
public ProductService(ProductRepository repository) {
this.repository = repository;
}
public List<Product> findProductByName(String productName) {
return repository.findByProductName(productName);
}
public Optional<Product> findById(String productId, String category) {
return repository.findById(productId, new PartitionKey(category));
}
public void saveProduct(Product product) {
repository.save(product);
}
public void delete(String productId, String category) {
repository.deleteById(productId, new PartitionKey(category));
}
}

View File

@ -0,0 +1,4 @@
azure.cosmosdb.uri=cosmodb-uri
azure.cosmosdb.key=cosmodb-primary-key
azure.cosmosdb.secondaryKey=cosmodb-second-key
azure.cosmosdb.database=cosmodb-name

View File

@ -0,0 +1,33 @@
package com.baeldung.spring.data.cosmosdb;
import com.azure.data.cosmos.PartitionKey;
import com.baeldung.spring.data.cosmosdb.entity.Product;
import com.baeldung.spring.data.cosmosdb.repository.ProductRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.Assert;
@SpringBootTest
public class AzureCosmosDbApplicationManualTest {
@Autowired
ProductRepository productRepository;
@Test
public void givenProductIsCreated_whenCallFindById_thenProductIsFound() {
Product product = new Product();
product.setProductid("1001");
product.setProductCategory("Shirt");
product.setPrice(110.0);
product.setProductName("Blue Shirt");
productRepository.save(product);
Product retrievedProduct = productRepository.findById("1001", new PartitionKey("Shirt"))
.orElse(null);
Assert.notNull(retrievedProduct, "Retrieved Product is Null");
}
}

View File

@ -0,0 +1,3 @@
### Relevant Articles:
- [Introduction to Spring Data JDBC](https://www.baeldung.com/spring-data-jdbc-intro)

View File

@ -0,0 +1,16 @@
## Spring Data JPA - Query
This module contains articles about querying data using Spring Data JPA
### Relevant Articles:
- [Use Criteria Queries in a Spring Data Application](https://www.baeldung.com/spring-data-criteria-queries)
- More articles: [[<-- prev]](../spring-data-jpa-query)
### Eclipse Config
After importing the project into Eclipse, you may see the following error:
"No persistence xml file found in project"
This can be ignored:
- Project -> Properties -> Java Persistance -> JPA -> Error/Warnings -> Select Ignore on "No persistence xml file found in project"
Or:
- Eclipse -> Preferences - Validation - disable the "Build" execution of the JPA Validator

View File

@ -0,0 +1,33 @@
<?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>spring-data-jpa-query</artifactId>
<name>spring-data-jpa-query-2</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-boot-2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-boot-2</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,9 +1,9 @@
package com.baeldung.persistence.dao; package com.baeldung.persistence.dao;
import java.util.List;
import com.baeldung.persistence.model.Book; import com.baeldung.persistence.model.Book;
import java.util.List;
public interface BookRepositoryCustom { public interface BookRepositoryCustom {
List<Book> findBooksByAuthorNameAndTitle(String authorName, String title); List<Book> findBooksByAuthorNameAndTitle(String authorName, String title);

View File

@ -1,7 +1,7 @@
package com.baeldung.persistence.dao; package com.baeldung.persistence.dao;
import java.util.ArrayList; import com.baeldung.persistence.model.Book;
import java.util.List; import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
@ -9,9 +9,8 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import java.util.ArrayList;
import com.baeldung.persistence.model.Book; import java.util.List;
import org.springframework.stereotype.Repository;
@Repository @Repository
public class BookRepositoryImpl implements BookRepositoryCustom { public class BookRepositoryImpl implements BookRepositoryCustom {

Some files were not shown because too many files have changed in this diff Show More