Merge branch 'master' into PR-7319

This commit is contained in:
parthiv39731
2024-01-27 00:23:33 +05:30
committed by GitHub
504 changed files with 78663 additions and 862 deletions
@@ -5,4 +5,5 @@
- [Getting Pixel Array From Image in Java](https://www.baeldung.com/java-getting-pixel-array-from-image)
- [Calculate Distance Between Two Coordinates in Java](https://www.baeldung.com/java-find-distance-between-points)
- [Rotate Arrays in Java](https://www.baeldung.com/java-rotate-arrays)
- [Find Missing Number From a Given Array in Java](https://www.baeldung.com/java-array-find-missing-number)
- More articles: [[<-- prev]](/algorithms-miscellaneous-6)
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

@@ -0,0 +1,153 @@
package com.baeldung.algorithms.weightedaverage;
import org.junit.jupiter.api.Test;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
import java.util.stream.IntStream;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class WeightedAverageUnitTest {
private List<Values> values = Arrays.asList(
new Values(1, 10),
new Values(3, 20),
new Values(5, 30),
new Values(7, 50),
new Values(9, 40)
);
private Double expected = 6.2;
@Test
void twoPass() {
double top = values.stream()
.mapToDouble(v -> v.value * v.weight)
.sum();
double bottom = values.stream()
.mapToDouble(v -> v.weight)
.sum();
double result = top / bottom;
assertEquals(expected, result);
}
@Test
void onePass() {
double top = 0;
double bottom = 0;
for (Values v : values) {
top += (v.value * v.weight);
bottom += v.weight;
}
double result = top / bottom;
assertEquals(expected, result);
}
@Test
void expanding() {
double result = values.stream()
.flatMap(v -> Collections.nCopies(v.weight, v.value).stream())
.mapToInt(v -> v)
.average()
.getAsDouble();
assertEquals(expected, result);
}
@Test
void reduce() {
class WeightedAverage {
final double top;
final double bottom;
public WeightedAverage(double top, double bottom) {
this.top = top;
this.bottom = bottom;
}
double average() {
return top / bottom;
}
}
double result = values.stream()
.reduce(new WeightedAverage(0, 0),
(acc, next) -> new WeightedAverage(
acc.top + (next.value * next.weight),
acc.bottom + next.weight),
(left, right) -> new WeightedAverage(
left.top + right.top,
left.bottom + right.bottom))
.average();
assertEquals(expected, result);
}
@Test
void customCollector() {
class WeightedAverage implements Collector<Values, WeightedAverage.RunningTotals, Double> {
class RunningTotals {
double top;
double bottom;
public RunningTotals() {
this.top = 0;
this.bottom = 0;
}
}
@Override
public Supplier<RunningTotals> supplier() {
return RunningTotals::new;
}
@Override
public BiConsumer<RunningTotals, Values> accumulator() {
return (current, next) -> {
current.top += (next.value * next.weight);
current.bottom += next.weight;
};
}
@Override
public BinaryOperator<RunningTotals> combiner() {
return (left, right) -> {
left.top += right.top;
left.bottom += right.bottom;
return left;
};
}
@Override
public Function<RunningTotals, Double> finisher() {
return rt -> rt.top / rt.bottom;
}
@Override
public Set<Characteristics> characteristics() {
return Collections.singleton(Characteristics.UNORDERED);
}
}
double result = values.stream()
.collect(new WeightedAverage());
assertEquals(expected, result);
}
private static class Values {
int value;
int weight;
public Values(int value, int weight) {
this.value = value;
this.weight = weight;
}
}
}
@@ -6,9 +6,9 @@
</appender>
<logger name="com.baeldung.httpclient.cookies" level="info"/>
<logger name="com.baeldung.httpclient.readresponsebodystring" level="debug"/>
<logger name="org.apache.http" level="debug"/>
<logger name="org.apache.hc.client5.http" level="debug"/>
<logger name="com.baeldung.httpclient.readresponsebodystring" level="INFO"/>
<logger name="org.apache.http" level="WARN"/>
<logger name="org.apache.hc.client5.http" level="WARN"/>
<root level="WARN">
<appender-ref ref="stdout"/>
+1
View File
@@ -15,3 +15,4 @@ You can build the project from the command line using: *mvn clean install*, or i
- [bootstrap-server in Kafka Configuration](https://www.baeldung.com/java-kafka-bootstrap-server)
- [Introduction to Apache Kafka](https://www.baeldung.com/apache-kafka)
- [Ensuring Message Ordering in Kafka: Strategies and Configurations](https://www.baeldung.com/kafka-message-ordering)
- [Read Multiple Messages with Apache Kafka](https://www.baeldung.com/kafka-read-multiple-messages)
+1 -1
View File
@@ -76,7 +76,7 @@
</dependencies>
<properties>
<poi.version>5.2.3</poi.version>
<poi.version>5.2.5</poi.version>
<poiji.version>4.1.1</poiji.version>
<fastexcel.version>0.15.7</fastexcel.version>
<jxl.version>2.6.12</jxl.version>
@@ -0,0 +1,53 @@
package com.baeldung.poi.rowstyle;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Path;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
public class PoiUtils {
private PoiUtils() {
}
private static void newCell(Row row, String value) {
short cellNum = row.getLastCellNum();
if (cellNum == -1)
cellNum = 0;
Cell cell = row.createCell(cellNum);
cell.setCellValue(value);
}
public static Row newRow(Sheet sheet, String... rowValues) {
Row row = sheet.createRow(sheet.getLastRowNum() + 1);
for (String value : rowValues) {
newCell(row, value);
}
return row;
}
public static CellStyle boldFontStyle(Workbook workbook) {
Font boldFont = workbook.createFont();
boldFont.setBold(true);
CellStyle boldStyle = workbook.createCellStyle();
boldStyle.setFont(boldFont);
return boldStyle;
}
public static void write(Workbook workbook, Path path) throws IOException {
try (FileOutputStream fileOut = new FileOutputStream(path.toFile())) {
workbook.write(fileOut);
}
}
}
@@ -0,0 +1,150 @@
package com.baeldung.poi.rowstyle;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.jupiter.api.Test;
class PoiBoldStyleIntegrationTest {
private void writeSampleSheet(Path destination, Workbook workbook) throws IOException {
Sheet sheet = workbook.createSheet();
CellStyle boldStyle = PoiUtils.boldFontStyle(workbook);
Row header = PoiUtils.newRow(sheet, "Name", "Value", "Details");
header.setRowStyle(boldStyle);
PoiUtils.newRow(sheet, "Albert", "A", "First");
PoiUtils.newRow(sheet, "Jane", "B", "Second");
PoiUtils.newRow(sheet, "Zack", "C", "Third");
PoiUtils.write(workbook, destination);
}
private void assertRowStyleAppliedAndDefaultCellStylesDontMatch(Path sheetFile) throws IOException, InvalidFormatException {
try (Workbook workbook = new XSSFWorkbook(sheetFile.toFile())) {
Sheet sheet = workbook.getSheetAt(0);
Row row0 = sheet.getRow(0);
XSSFCellStyle rowStyle = (XSSFCellStyle) row0.getRowStyle();
assertTrue(rowStyle.getFont()
.getBold());
row0.forEach(cell -> {
XSSFCellStyle style = (XSSFCellStyle) cell.getCellStyle();
assertNotEquals(rowStyle, style);
});
Row row1 = sheet.getRow(1);
XSSFCellStyle row1Style = (XSSFCellStyle) row1.getRowStyle();
assertNull(row1Style);
Files.delete(sheetFile);
}
}
@Test
void givenXssfWorkbook_whenSetRowStyle1stRow_thenOnly1stRowStyled() throws IOException, InvalidFormatException {
Path sheetFile = Files.createTempFile("xssf-row-style", ".xlsx");
try (Workbook workbook = new XSSFWorkbook()) {
writeSampleSheet(sheetFile, workbook);
}
assertRowStyleAppliedAndDefaultCellStylesDontMatch(sheetFile);
}
@Test
void givenSxssfWorkbook_whenSetRowStyle_thenOnly1stRowStyled() throws IOException, InvalidFormatException {
Path sheetFile = Files.createTempFile("sxssf-row-style", ".xlsx");
try (Workbook workbook = new SXSSFWorkbook()) {
writeSampleSheet(sheetFile, workbook);
}
assertRowStyleAppliedAndDefaultCellStylesDontMatch(sheetFile);
}
@Test
void givenHssfWorkbook_whenSetRowStyle_thenOnly1stRowStyled() throws IOException {
Path sheetFile = Files.createTempFile("hssf-row-style", ".xls");
try (Workbook workbook = new HSSFWorkbook()) {
writeSampleSheet(sheetFile, workbook);
}
try (Workbook workbook = new HSSFWorkbook(Files.newInputStream(sheetFile))) {
Sheet sheet = workbook.getSheetAt(0);
Row row0 = sheet.getRow(0);
HSSFCellStyle rowStyle = (HSSFCellStyle) row0.getRowStyle();
assertTrue(rowStyle.getFont(workbook)
.getBold());
row0.forEach(cell -> {
HSSFCellStyle style = (HSSFCellStyle) cell.getCellStyle();
assertNotEquals(rowStyle, style);
});
Row row1 = sheet.getRow(1);
HSSFCellStyle row1Style = (HSSFCellStyle) row1.getRowStyle();
assertNull(row1Style);
Files.delete(sheetFile);
}
}
@Test
void givenXssfWorkbook_whenSetCellStyleForEachRow_thenAllCellsContainStyle() throws IOException, InvalidFormatException {
Path sheetFile = Files.createTempFile("xssf-cell-style", ".xlsx");
try (Workbook workbook = new XSSFWorkbook()) {
Sheet sheet = workbook.createSheet();
CellStyle boldStyle = PoiUtils.boldFontStyle(workbook);
Row header = PoiUtils.newRow(sheet, "Name", "Value", "Details");
header.forEach(cell -> cell.setCellStyle(boldStyle));
PoiUtils.newRow(sheet, "Albert", "A", "First");
PoiUtils.newRow(sheet, "Jane", "B", "Second");
PoiUtils.newRow(sheet, "Zack", "C", "Third");
PoiUtils.write(workbook, sheetFile);
}
try (Workbook workbook = new XSSFWorkbook(sheetFile.toFile())) {
Sheet sheet = workbook.getSheetAt(0);
Row row0 = sheet.getRow(0);
XSSFCellStyle rowStyle = (XSSFCellStyle) row0.getRowStyle();
assertNull(rowStyle);
row0.forEach(cell -> {
XSSFCellStyle style = (XSSFCellStyle) cell.getCellStyle();
assertTrue(style.getFont()
.getBold());
});
Row row1 = sheet.getRow(1);
rowStyle = (XSSFCellStyle) row1.getRowStyle();
assertNull(rowStyle);
Files.delete(sheetFile);
}
}
}
@@ -10,7 +10,7 @@ import feign.gson.GsonEncoder;
import feign.slf4j.Slf4jLogger;
import uk.org.webcompere.lightweightconfig.ConfigLoader;
import static feign.Logger.Level.FULL;
import static feign.Logger.Level.BASIC;
public class Services extends AbstractModule {
@Override
@@ -20,14 +20,14 @@ public class Services extends AbstractModule {
ToDoApi toDoApi = Feign.builder()
.decoder(new GsonDecoder())
.logger(new Slf4jLogger())
.logLevel(FULL)
.logLevel(BASIC)
.requestInterceptor(new BasicAuthRequestInterceptor(config.getToDoCredentials().getUsername(), config.getToDoCredentials().getPassword()))
.target(ToDoApi.class, config.getToDoEndpoint());
PostApi postApi = Feign.builder()
.encoder(new GsonEncoder())
.logger(new Slf4jLogger())
.logLevel(FULL)
.logLevel(BASIC)
.requestInterceptor(new BasicAuthRequestInterceptor(config.getPostCredentials().getUsername(), config.getPostCredentials().getPassword()))
.target(PostApi.class, config.getPostEndpoint());
@@ -1,7 +1,5 @@
package com.baeldung.closures
import spock.lang.Specification
class ClosuresUnitTest extends GroovyTestCase {
Closures closures = new Closures()
@@ -64,9 +62,9 @@ class ClosuresUnitTest extends GroovyTestCase {
void testClosureInLists() {
def list = [10, 11, 12, 13, 14, true, false, "BUNTHER"]
list.each {
/*list.each {
println it
}
}*/
assert [13, 14] == list.findAll{ it instanceof Integer && it >= 13}
}
@@ -0,0 +1,21 @@
package com.baeldung.jfrview;
import java.util.ArrayList;
import java.util.List;
public class JFRExample {
public static void main(String[] args) {
JFRExample se = new JFRExample();
se.insertToList(new ArrayList<>());
}
private void insertToList(List<Object> list) {
try {
while (true) {
list.add(new Object());
}
} catch (OutOfMemoryError e) {
System.out.println("Out of Memory. Exiting");
}
}
}
@@ -9,4 +9,5 @@
- [Round the Date in Java](https://www.baeldung.com/java-round-the-date)
- [Representing Furthest Possible Date in Java](https://www.baeldung.com/java-date-represent-max)
- [Retrieving Unix Time in Java](https://www.baeldung.com/java-retrieve-unix-time)
- [Calculate Months Between Two Dates in Java](https://www.baeldung.com/java-months-difference-two-dates)
- [[<-- Prev]](/core-java-modules/core-java-datetime-java8-1)
@@ -0,0 +1,46 @@
package com.baeldung.daterangeoverlap;
import java.time.LocalDate;
import java.util.Calendar;
import org.joda.time.DateTime;
import org.joda.time.Interval;
public class DateRangeOverlapChecker {
public static boolean isOverlapUsingCalendarAndDuration(Calendar start1, Calendar end1, Calendar start2, Calendar end2) {
long overlap = Math.min(end1.getTimeInMillis(), end2.getTimeInMillis()) - Math.max(start1.getTimeInMillis(), start2.getTimeInMillis());
return overlap >= 0;
}
public static boolean isOverlapUsingLocalDateAndDuration(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2) {
long overlap = Math.min(end1.toEpochDay(), end2.toEpochDay()) - Math.max(start1.toEpochDay(), start2.toEpochDay());
return overlap >= 0;
}
public static boolean isOverlapUsingJodaTime(DateTime start1, DateTime end1, DateTime start2, DateTime end2) {
Interval interval1 = new Interval(start1, end1);
Interval interval2 = new Interval(start2, end2);
return interval1.overlaps(interval2);
}
public static boolean isOverlapUsingCalendarAndCondition(Calendar start1, Calendar end1, Calendar start2, Calendar end2) {
return !(end1.before(start2) || start1.after(end2));
}
public static boolean isOverlapUsingLocalDateAndCondition(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2) {
return !(end1.isBefore(start2) || start1.isAfter(end2));
}
public static boolean isOverlapUsingCalendarAndFindMin(Calendar start1, Calendar end1, Calendar start2, Calendar end2) {
long overlap1 = Math.min(end1.getTimeInMillis() - start1.getTimeInMillis(), end1.getTimeInMillis() - start2.getTimeInMillis());
long overlap2 = Math.min(end2.getTimeInMillis() - start2.getTimeInMillis(), end2.getTimeInMillis() - start1.getTimeInMillis());
return Math.min(overlap1, overlap2) / (24 * 60 * 60 * 1000) >= 0;
}
public static boolean isOverlapUsingLocalDateAndFindMin(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2) {
long overlap1 = Math.min(end1.toEpochDay() - start1.toEpochDay(), end1.toEpochDay() - start2.toEpochDay());
long overlap2 = Math.min(end2.toEpochDay() - start2.toEpochDay(), end2.toEpochDay() - start1.toEpochDay());
return Math.min(overlap1, overlap2) >= 0;
}
}
@@ -0,0 +1,158 @@
package com.baeldung.daterangeoverlap;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.time.LocalDate;
import java.util.Calendar;
import org.joda.time.DateTime;
import org.junit.Test;
public class DateRangeOverlapCheckerUnitTest {
@Test
public void givenPartialOverlappingRanges_thenReturnsTrue() {
Calendar start1 = Calendar.getInstance();
start1.set(2024, 11, 15);
Calendar end1 = Calendar.getInstance();
end1.set(2024, 11, 20);
Calendar start2 = Calendar.getInstance();
start2.set(2024, 11, 18);
Calendar end2 = Calendar.getInstance();
end2.set(2024, 11, 22);
LocalDate startLD1 = LocalDate.of(2024, 12, 15);
LocalDate endLD1 = LocalDate.of(2024, 12, 20);
LocalDate startLD2 = LocalDate.of(2024, 12, 18);
LocalDate endLD2 = LocalDate.of(2024, 12, 22);
DateTime startJT1 = new DateTime(2024, 12, 15, 0, 0);
DateTime endJT1 = new DateTime(2024, 12, 20, 0, 0);
DateTime startJT2 = new DateTime(2024, 12, 18, 0, 0);
DateTime endJT2 = new DateTime(2024, 12, 22, 0, 0);
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndDuration(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndDuration(startLD1, endLD1, startLD2, endLD2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndCondition(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndCondition(startLD1, endLD1, startLD2, endLD2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndFindMin(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndFindMin(startLD1, endLD1, startLD2, endLD2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingJodaTime(startJT1, endJT1, startJT2, endJT2));
}
@Test
public void givenFullOverlappingRanges_thenReturnsTrue() {
Calendar start1 = Calendar.getInstance();
start1.set(2024, 11, 15);
Calendar end1 = Calendar.getInstance();
end1.set(2024, 11, 20);
Calendar start2 = Calendar.getInstance();
start2.set(2024, 11, 16);
Calendar end2 = Calendar.getInstance();
end2.set(2024, 11, 18);
LocalDate startLD1 = LocalDate.of(2024, 12, 15);
LocalDate endLD1 = LocalDate.of(2024, 12, 20);
LocalDate startLD2 = LocalDate.of(2024, 12, 16);
LocalDate endLD2 = LocalDate.of(2024, 12, 18);
DateTime startJT1 = new DateTime(2024, 12, 15, 0, 0);
DateTime endJT1 = new DateTime(2024, 12, 20, 0, 0);
DateTime startJT2 = new DateTime(2024, 12, 16, 0, 0);
DateTime endJT2 = new DateTime(2024, 12, 18, 0, 0);
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndDuration(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndDuration(startLD1, endLD1, startLD2, endLD2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndCondition(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndCondition(startLD1, endLD1, startLD2, endLD2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndFindMin(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndFindMin(startLD1, endLD1, startLD2, endLD2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingJodaTime(startJT1, endJT1, startJT2, endJT2));
}
@Test
public void givenConsecutiveRanges_thenReturnsFalse() {
Calendar start1 = Calendar.getInstance();
start1.set(2024, 11, 15);
Calendar end1 = Calendar.getInstance();
end1.set(2024, 11, 20);
Calendar start2 = Calendar.getInstance();
start2.set(2024, 11, 21);
Calendar end2 = Calendar.getInstance();
end2.set(2024, 11, 24);
LocalDate startLD1 = LocalDate.of(2024, 12, 15);
LocalDate endLD1 = LocalDate.of(2024, 12, 20);
LocalDate startLD2 = LocalDate.of(2024, 12, 21);
LocalDate endLD2 = LocalDate.of(2024, 12, 24);
DateTime startJT1 = new DateTime(2024, 12, 15, 0, 0);
DateTime endJT1 = new DateTime(2024, 12, 20, 0, 0);
DateTime startJT2 = new DateTime(2024, 12, 21, 0, 0);
DateTime endJT2 = new DateTime(2024, 12, 24, 0, 0);
assertFalse(DateRangeOverlapChecker.isOverlapUsingCalendarAndDuration(start1, end1, start2, end2));
assertFalse(DateRangeOverlapChecker.isOverlapUsingLocalDateAndDuration(startLD1, endLD1, startLD2, endLD2));
assertFalse(DateRangeOverlapChecker.isOverlapUsingCalendarAndCondition(start1, end1, start2, end2));
assertFalse(DateRangeOverlapChecker.isOverlapUsingLocalDateAndCondition(startLD1, endLD1, startLD2, endLD2));
assertFalse(DateRangeOverlapChecker.isOverlapUsingCalendarAndFindMin(start1, end1, start2, end2));
assertFalse(DateRangeOverlapChecker.isOverlapUsingLocalDateAndFindMin(startLD1, endLD1, startLD2, endLD2));
assertFalse(DateRangeOverlapChecker.isOverlapUsingJodaTime(startJT1, endJT1, startJT2, endJT2));
}
@Test
public void givenZeroRangeRanges_thenReturnsTrue() {
Calendar start1 = Calendar.getInstance();
start1.set(2024, 11, 15);
Calendar end1 = Calendar.getInstance();
end1.set(2024, 11, 20);
Calendar start2 = Calendar.getInstance();
start2.set(2024, 11, 20);
Calendar end2 = Calendar.getInstance();
end2.set(2024, 11, 20);
LocalDate startLD1 = LocalDate.of(2024, 12, 15);
LocalDate endLD1 = LocalDate.of(2024, 12, 20);
LocalDate startLD2 = LocalDate.of(2024, 12, 20);
LocalDate endLD2 = LocalDate.of(2024, 12, 20);
DateTime startJT1 = new DateTime(2024, 12, 15, 0, 0);
DateTime endJT1 = new DateTime(2024, 12, 20, 0, 0);
DateTime startJT2 = new DateTime(2024, 12, 20, 0, 0);
DateTime endJT2 = new DateTime(2024, 12, 20, 0, 0);
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndDuration(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndDuration(startLD1, endLD1, startLD2, endLD2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndCondition(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndCondition(startLD1, endLD1, startLD2, endLD2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndFindMin(start1, end1, start2, end2));
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndFindMin(startLD1, endLD1, startLD2, endLD2));
//the overlaps method considers two intervals as overlapping only if they have a non-zero duration.
assertFalse(DateRangeOverlapChecker.isOverlapUsingJodaTime(startJT1, endJT1, startJT2, endJT2));
}
}
@@ -0,0 +1,25 @@
package com.baeldung.zoneoffsetandzoneidof;
import org.junit.jupiter.api.Test;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class ZoneOffSetAndZoneIdOfUnitTest {
@Test
public void givenOffsetDateTimeWithUTCZoneOffset_thenOffsetShouldBeUTC() {
OffsetDateTime dateTimeWithOffset = OffsetDateTime.now(ZoneOffset.UTC);
assertEquals(dateTimeWithOffset.getOffset(), ZoneOffset.UTC);
}
@Test
public void givenZonedDateTimeWithUTCZoneId_thenZoneShouldBeUTC() {
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
assertEquals(zonedDateTime.getZone(), ZoneId.of("UTC"));
}
}
@@ -0,0 +1,36 @@
package com.baeldung.array.conversions;
import static org.assertj.core.api.Assertions.assertThat;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.jupiter.api.Test;
public class ByteArrayToPrimitiveByteArrayUnitTest {
private static final byte[] EXPECTED_ARRAY_VALUES = {65, 66, 67, 68};
private static final Byte[] BYTE_ARRAY = {65, 66, 67, 68};
@Test
public void givenByteArray_whenConvertingUsingByteValue_thenGiveExpectedResult() {
byte[] newByteArray = new byte[BYTE_ARRAY.length];
for (int i = 0; i < BYTE_ARRAY.length; i++) {
newByteArray[i] = BYTE_ARRAY[i].byteValue();
}
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
}
@Test
public void givenByteArray_whenConvertingUsingUnboxing_thenGiveExpectedResult() {
byte[] newByteArray = new byte[BYTE_ARRAY.length];
for (int i = 0; i < BYTE_ARRAY.length; i++) {
newByteArray[i] = BYTE_ARRAY[i];
}
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
}
@Test
public void givenByteArray_whenConvertingArrayUtils_thenGiveExpectedResult() {
byte[] newByteArray = ArrayUtils.toPrimitive(BYTE_ARRAY);
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
}
}
@@ -0,0 +1,47 @@
package com.baeldung.array.conversions;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.jupiter.api.Test;
public class PrimitiveByteArrayToByteArrayUnitTest {
private static final byte[] PRIMITIVE_BYTE_ARRAY = {65, 66, 67, 68};
private static final Byte[] EXPECTED_ARRAY_VALUES = {65, 66, 67, 68};
@Test
public void givenPrimitiveByteArray_whenConvertingUsingByteValueOf_thenGiveExpectedResult() {
Byte[] newByteArray = new Byte[PRIMITIVE_BYTE_ARRAY.length];
for (int i = 0; i < PRIMITIVE_BYTE_ARRAY.length; i++) {
newByteArray[i] = Byte.valueOf(PRIMITIVE_BYTE_ARRAY[i]);
}
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
}
@Test
public void givenPrimitiveByteArray_whenConvertingUsingAutoboxing_thenGiveExpectedResult() {
Byte[] newByteArray = new Byte[PRIMITIVE_BYTE_ARRAY.length];
for (int i = 0; i < PRIMITIVE_BYTE_ARRAY.length; i++) {
newByteArray[i] = PRIMITIVE_BYTE_ARRAY[i];
}
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
}
@Test
public void givenPrimitiveByteArray_whenConvertingUsingAutoboxingAndArraysSetAll_thenGiveExpectedResult() {
Byte[] newByteArray = new Byte[PRIMITIVE_BYTE_ARRAY.length];
Arrays.setAll(newByteArray, n -> PRIMITIVE_BYTE_ARRAY[n]);
assertThat(newByteArray)
.containsExactly(EXPECTED_ARRAY_VALUES);
}
@Test
public void givenPrimitiveByteArray_whenConvertingUsingArrayUtils_thenGiveExpectedResult() {
Byte[] newByteArray = ArrayUtils.toObject(PRIMITIVE_BYTE_ARRAY);
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
}
}
@@ -0,0 +1,70 @@
package com.baeldung.unicodechar;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class UnicodeCharFromCodePointHexStringUnitTest {
private static final String U_CHECK = "✅"; // U+2705
private static final String U_STRONG = "强"; // U+5F3A
@Test
void whenEscapeUAndNumberInString_thenGetExpectedUnicodeStr() {
String check = "\u2705";
assertEquals(U_CHECK, check);
String strong = "\u5F3A";
assertEquals(U_STRONG, strong);
// "A" U+0041
assertEquals("A", "\u0041");
}
@Test
void whenConcatUAndNumberAsString_thenDoNotGetExpectedUnicodeStr() {
String check = "\\u" + "2705";
assertEquals("\\u2705", check);
String strong = "\\u" + "5F3A";
assertEquals("\\u5F3A", strong);
}
@Test
void whenCastHexCodePointToCharAndConvertCharToString_thenGetExpectedUnicodeStr() {
int codePoint = Integer.parseInt("2705", 16); //Decimal int: 9989
char[] checkChar = Character.toChars(codePoint);
String check = String.valueOf(checkChar);
assertEquals(U_CHECK, check);
// For Java 11 and later versions
// assertEquals(U_CHECK, Character.toString(codePoint));
codePoint = Integer.parseInt("5F3A", 16); //Decimal int: 24378
char[] strongChar = Character.toChars(codePoint);
String strong = String.valueOf(strongChar);
assertEquals(U_STRONG, strong);
// For Java 11 and later versions
// assertEquals(U_STRONG, Character.toString(codePoint));
}
String stringFromCodePointHex(String codePointHex) {
int codePoint = Integer.parseInt(codePointHex, 16);
// For Java 11 and later versions: return Character.toString(codePoint)
char[] chars = Character.toChars(codePoint);
return String.valueOf(chars);
}
@Test
void whenUsingstringFromCodePointHex_thenGetExpectedUnicodeStr() {
assertEquals("A", stringFromCodePointHex("0041"));
assertEquals(U_CHECK, stringFromCodePointHex("2705"));
assertEquals(U_STRONG, stringFromCodePointHex("5F3A"));
}
}
@@ -11,4 +11,6 @@
- [Intro to Vector Class in Java](https://www.baeldung.com/java-vector-guide)
- [HashSet toArray() Method in Java](https://www.baeldung.com/java-hashset-toarray)
- [Time Complexity of Java Collections Sort in Java](https://www.baeldung.com/java-time-complexity-collections-sort)
- [Check if List Contains at Least One Enum](https://www.baeldung.com/java-list-check-enum-presence)
- [Comparison of for Loops and Iterators](https://www.baeldung.com/java-for-loops-vs-iterators)
- More articles: [[<-- prev]](/core-java-modules/core-java-collections-4)
@@ -0,0 +1,36 @@
package com.baeldung.priorityqueueiterator;
import java.util.Comparator;
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class PersonAgeComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.age - p2.age; // Ascending order
}
}
@@ -0,0 +1,97 @@
package com.baeldung.priorityqueueiterator;
import java.util.Iterator;
import java.util.PriorityQueue;
public class PriorityQueueMain {
public static void main(String[] args) {
showPriorityQueueWithIterator();
showCustomOrderingWithIterator();
showCustomOrderingWithPoll();
useIteratorToCapitalizeNames();
showFailFastIteratorBehavior();
}
public static void showPriorityQueueWithIterator() {
PriorityQueue<Integer> queue = new PriorityQueue<>();
queue.add(3);
queue.add(1);
queue.add(2);
Iterator<Integer> iterator = queue.iterator();
while (iterator.hasNext()) {
Integer element = iterator.next();
System.out.println(element);
}
}
public static void showFailFastIteratorBehavior() {
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(3);
numbers.add(1);
numbers.add(2);
Iterator<Integer> iterator = numbers.iterator();
numbers.add(4);
try {
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (java.util.ConcurrentModificationException e) {
System.out.println("ConcurrentModificationException occurred during iteration.");
}
}
public static void showCustomOrderingWithIterator() {
// Creating a PriorityQueue with a custom comparator
PriorityQueue<Person> priorityQueue = new PriorityQueue<>(new PersonAgeComparator());
// Adding persons to the PriorityQueue
priorityQueue.add(new Person("Alice", 25));
priorityQueue.add(new Person("Bob", 30));
priorityQueue.add(new Person("Charlie", 22));
Iterator<Person> iterator = priorityQueue.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
System.out.println("Name: " + person.name + ", Age: " + person.age);
}
}
public static void showCustomOrderingWithPoll() {
PriorityQueue<Person> priorityQueue = new PriorityQueue<>(new PersonAgeComparator());
priorityQueue.add(new Person("Alice", 25));
priorityQueue.add(new Person("Bob", 30));
priorityQueue.add(new Person("Charlie", 22));
Iterator<Person> iterator = priorityQueue.iterator();
while (!priorityQueue.isEmpty()) {
Person person = priorityQueue.poll();
System.out.println("Name: " + person.name + ", Age: " + person.age);
}
}
public static void useIteratorToCapitalizeNames() {
PriorityQueue<Person> priorityQueue = new PriorityQueue<>(new PersonAgeComparator());
priorityQueue.add(new Person("Alice", 25));
priorityQueue.add(new Person("Bob", 30));
priorityQueue.add(new Person("Charlie", 22));
Iterator<Person> iterator = priorityQueue.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
person.setName(person.getName()
.toUpperCase());
System.out.println("Name: " + person.name + ", Age: " + person.age);
}
}
}
@@ -1,2 +1,5 @@
## Relevant Articles
- [Check if a List Contains a String Element While Ignoring Case](https://www.baeldung.com/java-list-search-case-insensitive)
- [Removing the Last Node in a Linked List](https://www.baeldung.com/java-linked-list-remove-last-element)
- [Call a Method on Each Element of a List in Java](https://www.baeldung.com/java-call-method-each-list-item)
- [Sorting One List Based on Another List in Java](https://www.baeldung.com/java-sorting-one-list-using-another)
@@ -0,0 +1,46 @@
package com.baeldung.resetlistiterator;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.ListIterator;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
public class ResetListIteratorUnitTest {
private static final List<String> MY_LIST = List.of("A", "B", "C", "D", "E", "F", "G");
@Test
void whenRecreateAnListIterator_thenGetTheExpectedResult() {
ListIterator<String> lit = MY_LIST.listIterator();
lit.next();
lit.next();
lit.next();
lit.next();
lit = MY_LIST.listIterator();
assertFalse(lit.hasPrevious());
assertEquals("A", lit.next());
}
@Test
void whenBackwardIterationToTheFirst_thenGetTheExpectedResult() {
ListIterator<String> lit = MY_LIST.listIterator();
lit.next();
lit.next();
lit.next();
lit.next();
while (lit.hasPrevious()) {
lit.previous();
}
assertFalse(lit.hasPrevious());
assertEquals("A", lit.next());
}
}
@@ -12,4 +12,5 @@ This module contains articles about basic Java concurrency
- [How to Get the Number of Threads in a Java Process](https://www.baeldung.com/java-get-number-of-threads)
- [Set the Name of a Thread in Java](https://www.baeldung.com/java-set-thread-name)
- [Thread vs. Single Thread Executor Service](https://www.baeldung.com/java-single-thread-executor-service)
- [Difference Between a Future and a Promise in Java](https://www.baeldung.com/java-future-vs-promise-comparison)
- [[<-- Prev]](../core-java-concurrency-basic)[[Next -->]](../core-java-concurrency-basic-3)
@@ -13,4 +13,5 @@ This module contains articles about basic Java concurrency.
- [Retry Logic with CompletableFuture](https://www.baeldung.com/java-completablefuture-retry-logic)
- [Convert From List of CompletableFuture to CompletableFuture List](https://www.baeldung.com/java-completablefuture-list-convert)
- [Synchronize a Static Variable Among Different Threads](https://www.baeldung.com/java-synchronize-static-variable-different-threads)
- [Difference Between execute() and submit() in Executor Service](https://www.baeldung.com/java-execute-vs-submit-executor-service)
- [[<-- Prev]](../core-java-concurrency-basic-2)
@@ -18,7 +18,8 @@ public class Employee {
}
private static void incrementCount() {
System.out.println("Count = " + ++count);
++count;
// System.out.println("Count = " + ++count);
}
public static Integer getCount() {
@@ -24,7 +24,8 @@ public class Employee {
private static void incrementCount() {
lock.lock();
try {
System.out.println("Count = " + ++count);
++count;
// System.out.println("Count = " + ++count);
}
finally {
lock.unlock();

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