Merging into own fork (#3)

* [BAEL-7621] - Fixed integration test of spring-hibernate-5 module by introducing H2 database

* BAEL-1985: Added Examples showing how to Initialize HashSet when it's constructed (#4715)

* Added Class for Initalizing HahsSet

* Updated Class name

* Delete InitializingSetTest.java

* Copy list to another list examples (#4725)

* Update README.MD (#4720)

* [BAEL-7621] - Fixed integration test of spring-hibernate-5 module by introducing H2 database (#4728)

* [BAEL-7645] - Fixed integration test of spring-jpa module through H2 inmemory DB

* BAEL-1814 Guide to Spring Webflux (#4450)

* BAEL-1814 Guide to Spring Webflux

-Added files for Employee reactive application
-Updated pom.xml for Spring Security

* BAEL-1814 Guide to Spring Webflux

-Added EmployeeControllerTest
-Updated method name in EmployeeController and corrected secured url in EmployeeWebSecurityConfig

* BAEL-1814 Guide to spring webflux

-Fixed security config, now only specific url prompts for authentication and not all endpoints
-Removed @WithMockUser as it is not needed now

* BAEL-1814 Guide To Webflux

-Feedback incorporation

* BAEL-1814 Spring Webflux Guide

-Formatted coded for EmployeeWebSocketHandler.

* Update and rename EmployeeControllerTest.java to EmployeeControllerUnitTest.java

* BAEL-1814 Guide to spring webflux

-Fixed EmployeeControllerUnitTest.java

* BAEL - 1916 (#4729)

Code refactored

* Renamed test methods to use BDD style

* Fixed integration test of spring-jpa module through inmemory H2 DB (#4740)

* [BAEL-7621] - Fixed integration test of spring-hibernate-5 module by introducing H2 database

* [BAEL-7645] - Fixed integration test of spring-jpa module through H2 inmemory DB

* guide to jmapper

* [BAEL-7651] - Fixed integration tests of spring-security-mvc-custom module by adding proper authentication manager

* clean only generated files

* added spring-rest-hal-browser code (#4701)

* Added spring-rest-template

* Updated README.md file

* Updated README.md file

* Update Makefile

* Update Makefile

* moved AuthenticationFailureHandler example to spring-security-mvc-login

* trying out separate modules in the integration profile

* maven cleanup

* fixing name of module

* running group 2

* running group 1

* fixing relative path

* Update Makefile

* Update Makefile

* Update JMapperIntegrationTest.java

* Update JMapperRelationalIntegrationTest.java

* Update MultipartFileUploadClient.java

* BAEL-1914 refactor (#4749)

* Server Sent Events example using Spring Webflux and React

* spring security custom AuthenticationFailureHandler

* refactor

* moved SSE to branch

* remove pom properties

* moved AuthenticationFailureHandler example to spring-security-mvc-login

* added link

* trying out profile-driven build

* minor maven cleanup

* activating group 2

* Update README.md

* BAEL-1850 (#4744)

* Micronaut server

* More server stuff; create client and test

* Rename directory, new concerete client example

* Remove hello-world directory from micronaut

* Update MavenWrapperDownloader.java

* running group 1, and small logging fix

* jnosql

* live test properly categorized

* temporarily making a test live

* moving the libraries module from group 1

* group 2

* enabling group 3

* * Added changes for BAEL-1922 Enable CORS in Spring Webflux (#4724)

* BAEL-2018 (#4753)

* BAEL-2018

* Update Animal.java

* rename

* running group 3

* jmeter excluded

* running group 2

* properly classifying a testclear

* live tests

* BAEL-1838 (#4692)

* #BAEL-1838 code samples. Renamed LambdaKotlinTest to have the build succeed.

* #BAEL-1838 code samples w/inheritance.

* #BAEL-1838 renamed logger helper function to getLogger to avoid confusion.

* #BAEL-1838 renamed logger helper function to getLogger to avoid confusion.

* BEAL-1985 - Removed Java 9 Example  (#4734)

* Added Class for Initalizing HahsSet

* Updated Class name

* Delete InitializingSetTest.java

* Modified HashSet Initilization Example

* Removed Java 9 Example

* Update HashSetInitalizingUnitTest.java

* Update HashSetInitalizingUnitTest.java

* Update HashSetInitalizingUnitTest.java

* Update HashSetInitalizingUnitTest.java

* group 3.2

* enabling 3.1

* running group 3

* Update README.md

Documenting the new default profile.

* fixing the default profile testing config

* groups 2 and 3

* minor major cleanup

* BAEL-1907 Created new module spring-testing

* new integration-lite profile

* integration-lite work

* BAEL-1862 Move the Junit 5 logic in the right module (#4747)

* BAEL-1862 Move the Junit 5 logic in the right module

-Moved Method Orders Tests from tutorails/junit5 project into correct project tutorials/testing-modules/junit-5
-Removed tutorials/junit5 project

* Update DefaultOrderOfExecutionTest.java

* Update README.md

* BAEL-1862 Move the Junit 5 logic in the right module

-Renamed *Test to *UnitTest

* Update README.md

* maven cleanup work

* logging cleanup

* BAEL-1907 Corrected formatting

* working through modules

* maven cleanup

* trying problematic modules

* integration heavy profile

* maven work

* Bael 1864 (#4727)

* running project without building tests

* include the DataCheck class

* Update TestFail.java

* guide to jmapper (#4745)

* guide to jmapper

* Update JMapperIntegrationTest.java

* Update JMapperRelationalIntegrationTest.java

* dupirefr/dupire.francois+pro@gmail.com [BAEL-1981] Query entities by dates and times with Spring Data JPA (#4737)

* [BAEL-1981] Article entity and repository + tests

* [BAEL-1981] Removing unnecessary fields

* moving long-running module

* BAEL-1992

* maven cleanup work

* BAEL-1818 - A Guide to Connection Pools in Java (#4735)

* Strange git issue with README.MD, wouldn't revert the file

* Initial Commit

* Initial Commit

* Update pom.xml

* Update pom.xml

* Initial Commit

* Update pom.xml

* Update source files

* Update source files

* Update source files

* Update source files

* Update Application.java

* Update pom.xml

* Update HikariCPDataSourceUnitTest class

* Update HikariCPDataSourceUnitTest.java

* Update pom.xml

* Update unit test classes

* Update BasicConnectionPoolUnitTest.java

* Fix indentation in DBCDDataSource class

* Update DBCPDataSource.java

* Update BasicConnectionPool class

* Update BasicConnectionPool class

* Update BasicConnectionPool.java

* Update BasicConnectionPool.java

* Update pom.xml

* Update pom.xml

* BAEL-1818 Refactored getConnection(), added shutdown(), cleaned up pom.xml

* BAEL-1818 Removed getConnectionPool(), upgraded c3po version

* BAEL-1818 Deleted obsolete connectionpool module

* BAEL-1818 Deleted obsolete connectionpool module

* move jmapper to libraries-data

* [BAEL-7635] Removed test generated files : Will be gitignored

* [BAEL-7635] - Commented out sortpom-maven-plugin that changes pom.xml in every build, added new entries in .gitignore

* BAEL-1852 - Testing an Abstract Class with JUnit (#4773)

* BAEL-1852 - Testing an Abstract Class with JUnit

* Fixed test method names and class names according to naming compliances.

* BAEL-1934 (#4768)

* Bean Object, server side and client side example for event streaming
example

* BAEL-1628

Access a File from the Classpath in a Spring Application

* inputstream retrieval added

* Removed files related to evaluation article

* + Aligning code to the article. Removed Utility methods and classes

* BAEL - 1628

* PMD fixes

* Code Review changes
Refactored : whenResourceUtils_thenReadSuccessful

* BAEL-1934

* +indentation correction in pom.xml

* synced with master

* indentation correction

* update to spring 5

* Bael 2018 (#4774)

* BAEL-2018

* Update Animal.java

* rename

* tests added

* generic type shorten

* update test

* BAEL-1911 - Fixing author's review comments (#4782)

* Strange git issue with README.MD, wouldn't revert the file

* Fixing review comments

* BAEL-1911 Refactored SQL code, fixed formatting

* fix swagger parent

* Update pom.xml

* Update pom.xml

* Overriding System time for testing (#4779)

* Overriding System time for testing

* Remove Joda Date Time examples

* BAEL-1728: add java instrumentation

* dupirefr/dupire.francois+pro@gmail.com [BAEL-1981] Spring data jpa dates (#4795)

* [BAEL-1981] Article entity and repository + tests

* [BAEL-1981] Removing unnecessary fields

* [BAEL-1981] spring-data-jpa module creation

* BAEL-1818 lamdba instead of loop; isEmpty() instead of == 0 (#4791)

* BAEL-2018 Moved to core-java-collections (#4796)

* BAEL-1691: comparing embedded servlet containers in spring boot

* vaadin spring

* format

* remove reactive ex

* move to reactive, extract mongodb ex

* PR for http://jira.baeldung.com/browse/BAEL-1947 Spring Boot Vue (#4687)

* commit first as binodpanta

* revert test change

* A short example of real-time event streaming using Spring WebFlux

* Code for http://jira.baeldung.com/browse/BAEL-1527

* remove unrelated files

* Apply feedback changes to rename test and remove link from readme file, ongoing work

* Update formatting fixes to code and add pom changes, that partially fix test runnning issues in IDE but not in cmdline

* Apply Eclipse formatter to test code and apply suggested pom fixes

* BAEL-1527 Formatting fix in pom.xml

* Use string.format to cleanup logging code

* BAEL-1527 Changed logging pattern

* Start the spring-boot-vue module, WIP

* some small updates with comments

* Add index html template page

* merge pom.xml fixes

* Add integration test with MockMvc to verify index.html content is rendered correctly

* fix up pom merge issues

* merge issues fix for pom

* pom end of file newline

* Update README.md

* Update README.md (#4706)

* add links (#4804)

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Create README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.MD

* Create README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* move mongodb ex

* fix readme files

* Bael 1832 (#4748)

* @Primary annotation

* @Primary annotation Employee name

* Update PrimaryApplication.java

* @Primary annotation with @Component

* add security exc

* added readme

* added link

* BAEL-2030 remove first element from list (#4803)

* BAEL-2042 JavaFaker unit tests

* Moved javafaker unit tests to testing-modules

* Update PushController.java

* * added examples of filtering collections using Streams, Apache CollectionUtils, Guava and Eclipse Collections

* * Added examples for java-9 filtering collector

* * minor fixes and cleaning duties

* add elements to list (#4814)

* BAEL-1960: Custom appender for log4j (#4731)

* BAEL-1960: Custom appender for log4j

* Changes as per suggestion to BAEL-1960

* Changes as [er review for BAEL-1960

* Changes for formatting as per suggestion.

* BAEL-1960. Copied pom.xml from master and pasted my changes against it.

* Chnages for spaces instead of tabs.

* Changes for spaces instead of tabs.

* PrincipalExtractor and AuthoritiesExtractor example

* Bael 1743 improved (#4826)

* compile only for firefox

* added parent module

* changed artifact id

* commenting out problematic modules in the integration-lite build

* integratio-lite profile work

* integration-lite work

* update spring data elasticsearch

* BAEL-1818 A Simple Guide to Connection Pooling in Java (#4823)

* Initial Commit

* Update parent pom.xml

* Update BasicConnectionPool class

* Update BasicConnectionPool class

* BAEL-1818 removed code from core-java module, cleaned up a little pom files

* BAEL-1818 moved the code from connectionpool.connectionpools package to connectionpool

* added link

* integration-lite trying out a few modules

* moved PrincipalExtractor and AuthoritiesExtractor example to spring-5-security module

* removed comment on pom

* [refs#BAEL-1992] Minor refactoring

* BAEL-1983 Intialize a HashMap in Java (#4819)

* move mqtt project

* added link

* Add items to list in core-java-collections (#4841)

* [BAEL-7608] - Fixed spring-5-reactive integration tests

* [BAEL-7608] - Reverted NettyContext to Embedded Tomcat example with Async = true

* [BAEL-7608] - Removed unused imports

* Update pom.xml

* [BAEL-7609] - Fixed spring-boot integration tests

* Added PR files for BAEL-2031 (#4844)

* Added source files for BAEL-2031

* Added test files for BAEL-2031

* upgrade sockets to spring5

* BAEL-1979 Added examples for SnakeYAML Library (#4802)

* BAEL-1979 Added examples for SnakeYAML Library

* BAEL-1979 Moved the snakeyaml related code to libraries module

* BAEL-1979 Removed the System.out.println() statements and converted the assertTrue to assertEquals wherever possible.

* BAEL-1979 Removed println statements, small formatting fix in pom.xml

* [BAEL-7608] - Fixed SecurityIntegrationTest with redirecting to login

* Bael 1555 - Improve Example (#4852)

* BAEL-1555

* Corrected indents and spacing

* RequestMapping to GetMapping

* Improved Performance For Concurrent Users

* BAEL-1958 Log using SLF4J (#4790)

* Log using SLF4J
Jira Ticket: BAEL-1958

* Incorporate first review comments

* Bael 2023 (#4851)

* bael-2023: removing all occurrences of a value from a list

* adjusting examples to match the article

* [BAEL-7437] - Added spring tx dependency to fix spring-mvc-simple junit 5 TCs

* add libraries server project

* remove extra files

* BAEL-1865 - Java Objects Sizes (#4584)

* BAEL-1865 - Java Objects Sizes

* BAEL-1865 - PR fix

* OAuth2 Principal and Authorities example - refactor and added example using custom authorization server

* Server-Sent Evensts

* BAEL-1936 Use of FilenameFilter (#4520)

* Added tests for FilenameFilter demo

-added a test to show FilenameFilter implementation
-added another test to show similar functionality using Predicate

* refactored code to get directory at a single location

* fixing formatting

* changed test class name to conform to custom rule

UnitTestNamingConventionRule lists the allowed test class names. Added ManualTest at the end to conform to the rule.

* add new module

* Update pom.xml (#4843)

* BAEL-1861 - Running JUnit tests from a Java application (#4526)

* BAEL-1562 - Thymeleaf sample working

* BAEL-1562 Code added for Fragments sample

* BAEL-1562 - Last correction for the test

* BAEL-1562 - Thymeleaf sample working

* BAEL-1562 Code added for Fragments sample

* BAEL-1562 - Last correction for the test

* Updates Thymeleaf version to 3.0.9.RELEASE

* Added msf4j projects

* updated msf4j project folder

* fixed issue with spring-thymeleaf/pom.xml

* Removed depedency-reduced-pom.xml

* Whitespacing fix

* Strange git issue with README.MD, wouldn't revert the file

* Added jupiter api

* Corrected junit test

* Added test engine to plugin

* Removed extra tag

* Little fixes to junit4 and junit4 run from java

* Removed scope from pom.xml

* Removed bin file from testing

* Slight changes for PMD

* Slight changes for PMD

* ok, moved code to another folder

* Renamed and fixed runjunitfromjava

* moved test classes to test folder

* moved main to src/java

* BAEL-1861 Moved test running classes to src/test/java

* Added changes to runjunitfromjava

* Added changes to runjunitfromjava

* BAEL-1861 Changed test execution code examples

* BAEL-1861 Changed test execution code examples; formatting

* Bael 1852 - Test case code is aligned to support Junit5 (#4847)

* add prototype bean ex with function

* remove extra classes

* remove extra import

* separate configs

* separate configs

* Update AppConfig.java

* Code update to support Junit5

* BAEL-1979 Added examples for SnakeYAML Library (#4802)

* BAEL-1979 Added examples for SnakeYAML Library

* BAEL-1979 Moved the snakeyaml related code to libraries module

* BAEL-1979 Removed the System.out.println() statements and converted the assertTrue to assertEquals wherever possible.

* BAEL-1979 Removed println statements, small formatting fix in pom.xml

* BAEL-1852 Renamed one test method, fixed formatting

* Bael 1273 Spring RSS Feed View (#4707)

* Added example for BAEL-1273 - rss feed with Spring.

* Fixed javadoc

* Removed useless SpringBootServletInitializer in RSS app's launcher

* Explicitely added Spring Boot starting class in pom.xml to prevent errors in package phase.

* Adding files for Exception Handling article (#4507)

* Adding files for Exception Handling article

* Updating files

* Test folder

* testing renaming

* Formatting and Naming Conventions

This commit reworks the code for the Intro to Exception Handling
article, ensuring that packages and classes are formatted and named
according to site standards.

* Update SseEmitterController.java (#4864)

* fixing package hierarchy (*.list.list.listoflist -> *.list.listoflist) (#4879)

* moved examples for 'removing all occurrences of an element from a list' to core-java-collections (#4878)

* BAEL-1958 Moved the example to logging-modules (#4886)

* Example for removing first element of array (BAEL-2029) (#4836)

* Example for removing first element of array (BAEL-2029)

* Use AssertJ assertions

* BAEL-1986 List initialization in one line (#4696)

* list initializations in one line

* Enhance after review

* formatting and naming

* Formatting and renaming 2

* Unit tests and DequeBasedSynchronizedStack added up

* Unit tests method names and class names modified as per the guidelines

* BAEL-1840 Builder Pattern in Kotlin (#4730)

* builder pattern in kotlin

* builder pattern in kotlin new-line

* deleted Sandbox, added unit test

* add other tests

* named and default parameters builder

* Make FoodOrderNamed a data class

* BAEL-1861 Replaced real tests with demo test "placeholders" (#4887)

* Spring Boot and Angular E-Commerce Application (#4874)

* Spring Boot and Angular E-Commerce Application

* Spring Boot and Angular E-Commerce Application pom.xml updated

* Spring Boot and Angular E-Commerce Application tests added

* BAEL-7965 JMH module fails when build (#4888)

* BAEL-7965 JMH module fails when build

-Added jmh module in default profile in parent pom

* Update pom.xml

moved jmh module to integration profile

* Create pom.xml

* Create FunctionTestSuite.java

BAEL-1857

* BAEL-1857 Running Parallel JUnit Tests with Maven

* BAEL-1901 and BAEL-1555 add links (#4892)

* BAEL-1766: Update README

* BAEL-1853: add link to article

* BAEL-1801: add link to article

* Added links back to articles

* Add links back to articles

* BAEL-1795: Update README

* BAEL-1901 and BAEL-1555 add links back to article

* [BAEL-1967] - Custom validation MessageSource in Spring Boot

* POM file updated for BAEL-1967

* BAEL-1704: Non-Trivial Work in Kotlin vs Java (#4861)

* BAEL-1704: Non-Trivial Work in Kotlin vs Java

* BAEL-1704: Non-Trivial Work in Kotlin vs Java

Renaming one test class

* Bael 1964 (#4881)

* Added initial code for BAEL-1964, in-memory authentication application

* Switched to default security encoder instead of a specific one

* Fix typo (#4897)

* add new module

* fix typo

* [BAEL-7670] Added logback.xml in missing modules in src/main/resources
This commit is contained in:
Neeraj Yadav
2018-08-05 20:21:07 +05:30
committed by GitHub
parent 88f832b6b7
commit 2926350e7b
1695 changed files with 56478 additions and 8373 deletions
+1
View File
@@ -30,3 +30,4 @@
- [How to TDD a List Implementation in Java](http://www.baeldung.com/java-test-driven-list)
- [How to Store Duplicate Keys in a Map in Java?](http://www.baeldung.com/java-map-duplicate-keys)
- [Getting the Size of an Iterable in Java](http://www.baeldung.com/java-iterable-size)
- [Iterating Backward Through a List](http://www.baeldung.com/java-list-iterate-backwards)
+59 -52
View File
@@ -1,60 +1,67 @@
<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</groupId>
<artifactId>core-java-collections</artifactId>
<version>0.1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>core-java-collections</name>
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</groupId>
<artifactId>core-java-collections</artifactId>
<version>0.1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>core-java-collections</name>
<parent>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-java</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent-java</relativePath>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent-java</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sourceforge.collections</groupId>
<artifactId>collections-generic</artifactId>
<version>${collections-generic.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons-collections4.version}</version>
</dependency>
<dependency>
<groupId>com.jayway.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>${avaitility.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>net.sourceforge.collections</groupId>
<artifactId>collections-generic</artifactId>
<version>${collections-generic.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons-collections4.version}</version>
</dependency>
<dependency>
<groupId>com.jayway.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>${avaitility.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.collections</groupId>
<artifactId>eclipse-collections</artifactId>
<version>${eclipse.collections.version}</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${junit.platform.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<commons-lang3.version>3.5</commons-lang3.version>
<commons-collections4.version>4.1</commons-collections4.version>
<collections-generic.version>4.01</collections-generic.version>
<avaitility.version>1.7.0</avaitility.version>
<assertj.version>3.6.1</assertj.version>
</properties>
<properties>
<junit.platform.version>1.2.0</junit.platform.version>
<commons-lang3.version>3.5</commons-lang3.version>
<commons-collections4.version>4.1</commons-collections4.version>
<collections-generic.version>4.01</collections-generic.version>
<avaitility.version>1.7.0</avaitility.version>
<assertj.version>3.6.1</assertj.version>
<eclipse.collections.version>9.2.0</eclipse.collections.version>
</properties>
</project>
@@ -0,0 +1,27 @@
package com.baeldung.convertlisttomap;
public class Animal {
private int id;
private String name;
public Animal(int id, String name) {
this.id = id;
this.setName(name);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@@ -0,0 +1,42 @@
package com.baeldung.convertlisttomap;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.MapUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ConvertListToMapService {
public Map<Integer, Animal> convertListBeforeJava8(List<Animal> list) {
Map<Integer, Animal> map = new HashMap<>();
for (Animal animal : list) {
map.put(animal.getId(), animal);
}
return map;
}
public Map<Integer, Animal> convertListAfterJava8(List<Animal> list) {
Map<Integer, Animal> map = list.stream().collect(Collectors.toMap(Animal::getId, animal -> animal));
return map;
}
public Map<Integer, Animal> convertListWithGuava(List<Animal> list) {
Map<Integer, Animal> map = Maps.uniqueIndex(list, Animal::getId);
return map;
}
public Map<Integer, Animal> convertListWithApacheCommons(List<Animal> list) {
Map<Integer, Animal> map = new HashMap<>();
MapUtils.populateMap(map, list, Animal::getId);
return map;
}
}
@@ -0,0 +1,16 @@
package com.baeldung.java.filtering;
import java.util.Collection;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
public class CollectionUtilsCollectionFilter {
static public Collection<Integer> findEvenNumbers(Collection<Integer> baseCollection) {
Predicate<Integer> apacheEventNumberPredicate = item -> item % 2 == 0;
CollectionUtils.filter(baseCollection, apacheEventNumberPredicate);
return baseCollection;
}
}
@@ -0,0 +1,32 @@
package com.baeldung.java.filtering;
import java.util.Collection;
import org.eclipse.collections.api.block.predicate.Predicate;
import org.eclipse.collections.impl.factory.Lists;
import org.eclipse.collections.impl.utility.Iterate;
public class EclipseCollectionsCollectionFilter {
static public Collection<Integer> findEvenNumbers(Collection<Integer> baseCollection) {
Predicate<Integer> eclipsePredicate = item -> item % 2 == 0;
Collection<Integer> filteredList = Lists.mutable.ofAll(baseCollection)
.select(eclipsePredicate);
return filteredList;
}
static public Collection<Integer> findEvenNumbersUsingIterate(Collection<Integer> baseCollection) {
Predicate<Integer> eclipsePredicate = new Predicate<Integer>() {
private static final long serialVersionUID = 1L;
@Override
public boolean accept(Integer arg0) {
return arg0 % 2 == 0;
}
};
Collection<Integer> filteredList = Iterate.select(baseCollection, eclipsePredicate);
return filteredList;
}
}
@@ -0,0 +1,17 @@
package com.baeldung.java.filtering;
import java.util.Collection;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
public class GuavaCollectionFilter {
static public Collection<Integer> findEvenNumbers(Collection<Integer> baseCollection) {
Predicate<Integer> guavaPredicate = item -> item % 2 == 0;
Collection<Integer> filteredCollection = Collections2.filter(baseCollection, guavaPredicate);
return filteredCollection;
}
}
@@ -0,0 +1,26 @@
package com.baeldung.java.filtering;
import java.util.Collection;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class StreamsCollectionFilter {
public static <T> Collection<T> filterCollectionHelperMethod(Collection<T> baseCollection, Predicate<T> predicate) {
return baseCollection.stream()
.filter(predicate)
.collect(Collectors.toList());
}
static public Collection<Integer> findEvenNumbersUsingHelperMethod(Collection<Integer> baseCollection) {
return filterCollectionHelperMethod(baseCollection, item -> item % 2 == 0);
}
static public Collection<Integer> findEvenNumbers(Collection<Integer> baseCollection) {
Predicate<Integer> streamsPredicate = item -> item % 2 == 0;
return baseCollection.stream()
.filter(streamsPredicate)
.collect(Collectors.toList());
}
}
@@ -0,0 +1,28 @@
package com.baeldung.java.list;
public class Flower {
private String name;
private int petals;
public Flower(String name, int petals) {
this.name = name;
this.petals = petals;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPetals() {
return petals;
}
public void setPetals(int petals) {
this.petals = petals;
}
}
@@ -0,0 +1,80 @@
package com.baeldung.java.map.initialize;
import java.util.AbstractMap;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class MapInitializer {
public static Map<String, String> articleMapOne;
static {
articleMapOne = new HashMap<>();
articleMapOne.put("ar01", "Intro to Map");
articleMapOne.put("ar02", "Some article");
}
public static Map<String, String> createSingletonMap() {
Map<String, String> passwordMap = Collections.singletonMap("username1", "password1");
return passwordMap;
}
public Map<String, String> createEmptyMap() {
Map<String, String> emptyMap = Collections.emptyMap();
return emptyMap;
}
public Map<String, String> createUsingDoubleBrace() {
Map<String, String> doubleBraceMap = new HashMap<String, String>() {
/**
*
*/
private static final long serialVersionUID = 1L;
{
put("key1", "value1");
put("key2", "value2");
}
};
return doubleBraceMap;
}
public Map<String, String> createMapUsingStreamStringArray() {
Map<String, String> map = Stream.of(new String[][] { { "Hello", "World" }, { "John", "Doe" }, })
.collect(Collectors.toMap(data -> data[0], data -> data[1]));
return map;
}
public Map<String, Integer> createMapUsingStreamObjectArray() {
Map<String, Integer> map = Stream.of(new Object[][] { { "data1", 1 }, { "data2", 2 }, })
.collect(Collectors.toMap(data -> (String) data[0], data -> (Integer) data[1]));
return map;
}
public Map<String, Integer> createMapUsingStreamSimpleEntry() {
Map<String, Integer> map = Stream.of(new AbstractMap.SimpleEntry<>("idea", 1), new AbstractMap.SimpleEntry<>("mobile", 2))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
return map;
}
public Map<String, Integer> createMapUsingStreamSimpleImmutableEntry() {
Map<String, Integer> map = Stream.of(new AbstractMap.SimpleImmutableEntry<>("idea", 1), new AbstractMap.SimpleImmutableEntry<>("mobile", 2))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
return map;
}
public Map<String, String> createImmutableMapWithStreams() {
Map<String, String> map = Stream.of(new String[][] { { "Hello", "World" }, { "John", "Doe" }, })
.collect(Collectors.collectingAndThen(Collectors.toMap(data -> data[0], data -> data[1]), Collections::<String, String> unmodifiableMap));
return map;
}
}
@@ -0,0 +1,111 @@
package com.baeldung.list.removeall;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class RemoveAll {
static void removeWithWhileLoopPrimitiveElement(List<Integer> list, int element) {
while (list.contains(element)) {
list.remove(element);
}
}
static void removeWithWhileLoopNonPrimitiveElement(List<Integer> list, Integer element) {
while (list.contains(element)) {
list.remove(element);
}
}
static void removeWithWhileLoopStoringFirstOccurrenceIndex(List<Integer> list, Integer element) {
int index;
while ((index = list.indexOf(element)) >= 0) {
list.remove(index);
}
}
static void removeWithCallingRemoveUntilModifies(List<Integer> list, Integer element) {
while (list.remove(element))
;
}
static void removeWithStandardForLoopUsingIndex(List<Integer> list, int element) {
for (int i = 0; i < list.size(); i++) {
if (Objects.equals(element, list.get(i))) {
list.remove(i);
}
}
}
static void removeWithForLoopDecrementOnRemove(List<Integer> list, int element) {
for (int i = 0; i < list.size(); i++) {
if (Objects.equals(element, list.get(i))) {
list.remove(i);
i--;
}
}
}
static void removeWithForLoopIncrementIfRemains(List<Integer> list, int element) {
for (int i = 0; i < list.size();) {
if (Objects.equals(element, list.get(i))) {
list.remove(i);
} else {
i++;
}
}
}
static void removeWithForEachLoop(List<Integer> list, int element) {
for (Integer number : list) {
if (Objects.equals(number, element)) {
list.remove(number);
}
}
}
static void removeWithIterator(List<Integer> list, int element) {
for (Iterator<Integer> i = list.iterator(); i.hasNext();) {
Integer number = i.next();
if (Objects.equals(number, element)) {
i.remove();
}
}
}
static List<Integer> removeWithCollectingAndReturningRemainingElements(List<Integer> list, int element) {
List<Integer> remainingElements = new ArrayList<>();
for (Integer number : list) {
if (!Objects.equals(number, element)) {
remainingElements.add(number);
}
}
return remainingElements;
}
static void removeWithCollectingRemainingElementsAndAddingToOriginalList(List<Integer> list, int element) {
List<Integer> remainingElements = new ArrayList<>();
for (Integer number : list) {
if (!Objects.equals(number, element)) {
remainingElements.add(number);
}
}
list.clear();
list.addAll(remainingElements);
}
static List<Integer> removeWithStreamFilter(List<Integer> list, Integer element) {
return list.stream()
.filter(e -> !Objects.equals(e, element))
.collect(Collectors.toList());
}
static void removeWithRemoveIf(List<Integer> list, Integer element) {
list.removeIf(n -> Objects.equals(n, element));
}
}
@@ -0,0 +1,36 @@
package com.baeldung.thread_safe_lifo;
import java.util.ArrayDeque;
/**
* Deque Based Stack implementation.
*/
public class DequeBasedSynchronizedStack<T> {
// Internal Deque which gets decorated for synchronization.
private ArrayDeque<T> dequeStore = new ArrayDeque<>();
public DequeBasedSynchronizedStack(int initialCapacity) {
this.dequeStore = new ArrayDeque<>(initialCapacity);
}
public DequeBasedSynchronizedStack() {
}
public synchronized T pop() {
return this.dequeStore.pop();
}
public synchronized void push(T element) {
this.dequeStore.push(element);
}
public synchronized T peek() {
return this.dequeStore.peek();
}
public synchronized int size() {
return this.dequeStore.size();
}
}
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
@@ -0,0 +1,68 @@
package com.baeldung.convertlisttomap;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
public class ConvertListToMapServiceUnitTest {
List<Animal> list;
private ConvertListToMapService convertListService;
@Before
public void init() {
this.convertListService = new ConvertListToMapService();
this.list = new ArrayList<>();
Animal cat = new Animal(1, "Cat");
list.add(cat);
Animal dog = new Animal(2, "Dog");
list.add(dog);
Animal pig = new Animal(3, "Pig");
list.add(pig);
Animal cow = new Animal(4, "Cow");
list.add(cow);
Animal goat = new Animal(5, "Goat");
list.add(goat);
}
@Test
public void givenAList_whenConvertBeforeJava8_thenReturnMapWithTheSameElements() {
Map<Integer, Animal> map = convertListService.convertListBeforeJava8(list);
assertThat(map.values(), containsInAnyOrder(list.toArray()));
}
@Test
public void givenAList_whenConvertAfterJava8_thenReturnMapWithTheSameElements() {
Map<Integer, Animal> map = convertListService.convertListAfterJava8(list);
assertThat(map.values(), containsInAnyOrder(list.toArray()));
}
@Test
public void givenAList_whenConvertWithGuava_thenReturnMapWithTheSameElements() {
Map<Integer, Animal> map = convertListService.convertListWithGuava(list);
assertThat(map.values(), containsInAnyOrder(list.toArray()));
}
@Test
public void givenAList_whenConvertWithApacheCommons_thenReturnMapWithTheSameElements() {
Map<Integer, Animal> map = convertListService.convertListWithApacheCommons(list);
assertThat(map.values(), containsInAnyOrder(list.toArray()));
}
}
@@ -0,0 +1,68 @@
package com.baeldung.convertlisttomap;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
public class ConvertListWithDiplicatedIdToMapServiceUnitTest {
List<Animal> duplicatedIdList;
private ConvertListToMapService convertListService = new ConvertListToMapService();
@Before
public void init() {
this.duplicatedIdList = new ArrayList<>();
Animal cat = new Animal(1, "Cat");
duplicatedIdList.add(cat);
Animal dog = new Animal(2, "Dog");
duplicatedIdList.add(dog);
Animal pig = new Animal(3, "Pig");
duplicatedIdList.add(pig);
Animal cow = new Animal(4, "Cow");
duplicatedIdList.add(cow);
Animal goat = new Animal(4, "Goat");
duplicatedIdList.add(goat);
}
@Test
public void givenADupIdList_whenConvertBeforeJava8_thenReturnMapWithRewrittenElement() {
Map<Integer, Animal> map = convertListService.convertListBeforeJava8(duplicatedIdList);
assertThat(map.values(), hasSize(4));
assertThat(map.values(), hasItem(duplicatedIdList.get(4)));
}
@Test
public void givenADupIdList_whenConvertWithApacheCommons_thenReturnMapWithRewrittenElement() {
Map<Integer, Animal> map = convertListService.convertListWithApacheCommons(duplicatedIdList);
assertThat(map.values(), hasSize(4));
assertThat(map.values(), hasItem(duplicatedIdList.get(4)));
}
@Test(expected = IllegalStateException.class)
public void givenADupIdList_whenConvertAfterJava8_thenException() {
convertListService.convertListAfterJava8(duplicatedIdList);
}
@Test(expected = IllegalArgumentException.class)
public void givenADupIdList_whenConvertWithGuava_thenException() {
convertListService.convertListWithGuava(duplicatedIdList);
}
}
@@ -0,0 +1,44 @@
package com.baeldung.java.filtering;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import org.junit.jupiter.api.Test;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.runner.RunWith;
@RunWith(JUnitPlatform.class)
public class CollectionFiltersUnitTest {
private static final Collection<Integer> BASE_INTEGER_COLLECTION = Arrays.asList(9, 14, 2, 7, 1, 5, 8);
private static final Collection<Integer> EXPECTED_EVEN_FILTERED_COLLECTION = Arrays.asList(14, 2, 8);
@Test
public void givenAStringCollection_whenFilteringFourLetterWords_thenObtainTheFilteredCollection() {
final Collection<String> baseStrings = Arrays.asList("java", "baeldung", "type", "example", "other");
Collection<String> filtered = StreamsCollectionFilter.filterCollectionHelperMethod(baseStrings, item -> item.length() == 4);
assertThat(filtered).containsExactlyInAnyOrder("java", "type");
}
@Test
public void givenAnIntegerCollection_whenFilteringEvenValues_thenObtainTheFilteredCollectionForAllCases() {
Collection<Integer> filteredWithStreams1 = StreamsCollectionFilter.findEvenNumbers(BASE_INTEGER_COLLECTION);
Collection<Integer> filteredWithCollectionUtils = CollectionUtilsCollectionFilter.findEvenNumbers(new ArrayList<>(BASE_INTEGER_COLLECTION));
Collection<Integer> filteredWithEclipseCollections = EclipseCollectionsCollectionFilter.findEvenNumbers(BASE_INTEGER_COLLECTION);
Collection<Integer> filteredWithEclipseCollectionsUsingIterate = EclipseCollectionsCollectionFilter.findEvenNumbersUsingIterate(BASE_INTEGER_COLLECTION);
Collection<Integer> filteredWithGuava = GuavaCollectionFilter.findEvenNumbers(BASE_INTEGER_COLLECTION);
assertThat(filteredWithStreams1).hasSameElementsAs(filteredWithCollectionUtils)
.hasSameElementsAs(filteredWithEclipseCollections)
.hasSameElementsAs(filteredWithEclipseCollectionsUsingIterate)
.hasSameElementsAs(filteredWithEclipseCollectionsUsingIterate)
.hasSameElementsAs(filteredWithGuava)
.hasSameElementsAs(EXPECTED_EVEN_FILTERED_COLLECTION);
}
}
@@ -0,0 +1,27 @@
package com.baeldung.java.map.initialize;
import static org.junit.Assert.assertEquals;
import java.util.Map;
import org.junit.Test;
public class MapInitializerUnitTest {
@Test
public void givenStaticMap_whenUpdated_thenCorrect() {
MapInitializer.articleMapOne.put("NewArticle1", "Convert array to List");
assertEquals(MapInitializer.articleMapOne.get("NewArticle1"), "Convert array to List");
}
@Test(expected=UnsupportedOperationException.class)
public void givenSingleTonMap_whenEntriesAdded_throwsException() {
Map<String, String> map = MapInitializer.createSingletonMap();
map.put("username2", "password2");
}
}
@@ -0,0 +1,70 @@
package com.baeldung.java.set;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
public class HashSetInitalizingUnitTest {
@Test
public void whenUsingJava_usingArraysStaticMethod_thenCorrectSize() {
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));
assertEquals(3, set.size());
}
@Test
public void whenUsingJava_usingAnonymousClass_thenCorrectSize() {
Set<String> set = new HashSet<String>(){{
add("a");
add("b");
add("c");
}};
assertEquals(3, set.size());
}
@Test
public void whenUsingJava_creatingSingletonSet_thenCorrectSize() {
Set<String> set = Collections.singleton("a");
assertEquals(1, set.size());
}
public static final <T> Set<T> newHashSet(T... objs) {
Set<T> set = new HashSet<T>();
Collections.addAll(set, objs);
return set;
}
@Test
public void whenUsingJava_usingCustomStaticUtilMethod_thenCorrectSize() {
Set<String> set = newHashSet("a","b","c");
assertEquals(3, set.size());
}
@Test
public void whenUsingJava8_usingCollectOnStream_thenCorrectSize() {
Set<String> set = Stream.of("a", "b", "c").collect(Collectors.toCollection(HashSet::new));
assertEquals(3, set.size());
}
@Test
public void whenUsingGoogleGuava_createMutableSet_thenCorrectSize() {
Set<String> set = Sets.newHashSet("a", "b", "c");
assertEquals(3, set.size());
}
@Test
public void whenUsingGoogleGuava_createImmutableSet_thenCorrectSize() {
Set<String> set = ImmutableSet.of("a", "b", "c");
assertEquals(3, set.size());
}
}
@@ -0,0 +1,69 @@
package com.baeldung.list.listoflist;
import com.baeldung.java.list.Flower;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.*;
import static org.junit.Assert.*;
public class AddElementsToListUnitTest {
List<Flower> flowers;
@Before
public void init() {
this.flowers = new ArrayList<>(Arrays.asList(
new Flower("Poppy", 12),
new Flower("Anemone", 8),
new Flower("Catmint", 12)));
}
@Test
public void givenAList_whenTargetListIsEmpty_thenReturnTargetListWithNewItems() {
List<Flower> anotherList = new ArrayList<>();
anotherList.addAll(flowers);
assertEquals(anotherList.size(), flowers.size());
Assert.assertTrue(anotherList.containsAll(flowers));
}
@Test
public void givenAList_whenTargetListIsEmpty_thenReturnTargetListWithOneModifiedElementByConstructor() {
List<Flower> anotherList = new ArrayList<>();
anotherList.addAll(flowers);
Flower flower = anotherList.get(0);
flower.setPetals(flowers.get(0).getPetals() * 3);
assertEquals(anotherList.size(), flowers.size());
Assert.assertTrue(anotherList.containsAll(flowers));
}
@Test
public void givenAListAndElements_whenUseCollectionsAddAll_thenAddElementsToTargetList() {
List<Flower> target = new ArrayList<>();
Collections.addAll(target, flowers.get(0), flowers.get(1), flowers.get(2), flowers.get(0));
assertEquals(target.size(), 4);
}
@Test
public void givenTwoList_whenSourceListDoesNotHaveNullElements_thenAddElementsToTargetListSkipFirstElementByStreamProcess() {
List<Flower> flowerVase = new ArrayList<>();
flowers.stream()
.skip(1)
.forEachOrdered(flowerVase::add);
assertEquals(flowerVase.size() + 1, flowers.size());
assertFalse(flowerVase.containsAll(flowers));
}
@Test
public void givenTwoList_whenSourceListDoesNotHaveNullElements_thenAddElementsToTargetListFilteringElementsByStreamProcess() {
List<Flower> flowerVase = new ArrayList<>();
flowers.stream()
.filter(f -> f.getPetals() > 10)
.forEachOrdered(flowerVase::add);
assertEquals(flowerVase.size() + 1, flowers.size());
assertFalse(flowerVase.containsAll(flowers));
}
@Test
public void givenAList_whenListIsNotNull_thenAddElementsToListByStreamProcessWihtOptional() {
List<Flower> target = new ArrayList<>();
Optional.ofNullable(flowers)
.ifPresent(target::addAll);
assertNotNull(target);
assertEquals(target.size(), 3);
}
}
@@ -0,0 +1,210 @@
package com.baeldung.list.removeall;
import static com.baeldung.list.removeall.RemoveAll.removeWithCallingRemoveUntilModifies;
import static com.baeldung.list.removeall.RemoveAll.removeWithCollectingAndReturningRemainingElements;
import static com.baeldung.list.removeall.RemoveAll.removeWithCollectingRemainingElementsAndAddingToOriginalList;
import static com.baeldung.list.removeall.RemoveAll.removeWithForEachLoop;
import static com.baeldung.list.removeall.RemoveAll.removeWithForLoopDecrementOnRemove;
import static com.baeldung.list.removeall.RemoveAll.removeWithForLoopIncrementIfRemains;
import static com.baeldung.list.removeall.RemoveAll.removeWithIterator;
import static com.baeldung.list.removeall.RemoveAll.removeWithRemoveIf;
import static com.baeldung.list.removeall.RemoveAll.removeWithStandardForLoopUsingIndex;
import static com.baeldung.list.removeall.RemoveAll.removeWithStreamFilter;
import static com.baeldung.list.removeall.RemoveAll.removeWithWhileLoopNonPrimitiveElement;
import static com.baeldung.list.removeall.RemoveAll.removeWithWhileLoopPrimitiveElement;
import static com.baeldung.list.removeall.RemoveAll.removeWithWhileLoopStoringFirstOccurrenceIndex;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.ConcurrentModificationException;
import java.util.List;
import org.junit.Test;
public class RemoveAllUnitTest {
private List<Integer> list(Integer... elements) {
return new ArrayList<>(Arrays.asList(elements));
}
@Test
public void givenAList_whenRemovingElementsWithWhileLoopUsingPrimitiveElement_thenTheResultCorrect() {
// given
List<Integer> list = list(1, 2, 3);
int valueToRemove = 1;
// when
assertThatThrownBy(() -> removeWithWhileLoopPrimitiveElement(list, valueToRemove))
.isInstanceOf(IndexOutOfBoundsException.class);
}
@Test
public void givenAList_whenRemovingElementsWithWhileLoopUsingNonPrimitiveElement_thenTheResultCorrect() {
// given
List<Integer> list = list(1, 2, 3);
int valueToRemove = 1;
// when
removeWithWhileLoopNonPrimitiveElement(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
@Test
public void givenAList_whenRemovingElementsWithWhileLoopStoringFirstOccurrenceIndex_thenTheResultCorrect() {
// given
List<Integer> list = list(1, 2, 3);
int valueToRemove = 1;
// when
removeWithWhileLoopStoringFirstOccurrenceIndex(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
@Test
public void givenAList_whenRemovingElementsWithCallingRemoveUntilModifies_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
removeWithCallingRemoveUntilModifies(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
@Test
public void givenAListWithoutDuplication_whenRemovingElementsWithStandardForLoopUsingIndex_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 2, 3);
int valueToRemove = 1;
// when
removeWithStandardForLoopUsingIndex(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
@Test
public void givenAListWithAdjacentElements_whenRemovingElementsWithStandardForLoop_thenTheResultIsInCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
removeWithStandardForLoopUsingIndex(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(1, 2, 3));
}
@Test
public void givenAListWithAdjacentElements_whenRemovingElementsWithForLoopAndDecrementOnRemove_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
removeWithForLoopDecrementOnRemove(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
@Test
public void givenAListWithAdjacentElements_whenRemovingElementsWithForLoopAndIncrementIfRemains_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
removeWithForLoopIncrementIfRemains(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
@Test
public void givenAList_whenRemovingElementsWithForEachLoop_thenExceptionIsThrown() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
assertThatThrownBy(() -> removeWithForEachLoop(list, valueToRemove))
.isInstanceOf(ConcurrentModificationException.class);
}
@Test
public void givenAList_whenRemovingElementsWithIterator_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
removeWithIterator(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
@Test
public void givenAList_whenRemovingElementsWithCollectingAndReturningRemainingElements_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
List<Integer> result = removeWithCollectingAndReturningRemainingElements(list, valueToRemove);
// then
assertThat(result).isEqualTo(list(2, 3));
}
@Test
public void givenAList_whenRemovingElementsWithCollectingRemainingAndAddingToOriginalList_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
removeWithCollectingRemainingElementsAndAddingToOriginalList(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
@Test
public void givenAList_whenRemovingElementsWithStreamFilter_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
List<Integer> result = removeWithStreamFilter(list, valueToRemove);
// then
assertThat(result).isEqualTo(list(2, 3));
}
@Test
public void givenAList_whenRemovingElementsWithCallingRemoveIf_thenTheResultIsCorrect() {
// given
List<Integer> list = list(1, 1, 2, 3);
int valueToRemove = 1;
// when
removeWithRemoveIf(list, valueToRemove);
// then
assertThat(list).isEqualTo(list(2, 3));
}
}
@@ -0,0 +1,51 @@
package com.baeldung.list.removefirst;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
public class RemoveFirstElementUnitTest {
private List<String> list = new ArrayList<>();
private LinkedList<String> linkedList = new LinkedList<>();
@Before
public void init() {
list.add("cat");
list.add("dog");
list.add("pig");
list.add("cow");
list.add("goat");
linkedList.add("cat");
linkedList.add("dog");
linkedList.add("pig");
linkedList.add("cow");
linkedList.add("goat");
}
@Test
public void givenList_whenRemoveFirst_thenRemoved() {
list.remove(0);
assertThat(list, hasSize(4));
assertThat(list, not(contains("cat")));
}
@Test
public void givenLinkedList_whenRemoveFirst_thenRemoved() {
linkedList.removeFirst();
assertThat(linkedList, hasSize(4));
assertThat(linkedList, not(contains("cat")));
}
}
@@ -0,0 +1,101 @@
package com.baeldung.stack_tests;
import com.baeldung.thread_safe_lifo.DequeBasedSynchronizedStack;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayDeque;
import java.util.concurrent.ConcurrentLinkedDeque;
import static java.util.stream.IntStream.range;
/**
* Correctness tests for Stack in multi threaded environment.
*/
public class MultithreadingCorrectnessStackUnitTest {
@Test
public void givenSynchronizedDeque_whenExecutedParallel_thenWorkRight() {
DequeBasedSynchronizedStack<Integer> deque = new DequeBasedSynchronizedStack<>();
// Serial execution of push on ConcurrentLinkedQueue will always result in correct execution.
range(1, 10000).forEach(value -> deque.push(value));
int sum = 0;
while(deque.peek() != null) {
sum += deque.pop();
}
Assert.assertEquals(49995000, sum);
// Parallel execution of push on ConcurrentLinkedQueue will always result in correct execution.
range(1, 10000).parallel().forEach(value -> deque.push(value));
sum = 0;
while(deque.peek() != null) {
sum += deque.pop();
}
Assert.assertEquals(49995000, sum);
}
@Test
public void givenConcurrentLinkedQueue_whenExecutedParallel_thenWorkRight() {
ConcurrentLinkedDeque<Integer> deque = new ConcurrentLinkedDeque<>();
// Serial execution of push on ConcurrentLinkedQueue will always result in correct execution.
range(1, 10000).forEach(value -> deque.push(value));
int sum = 0;
while(deque.peek() != null) {
sum += deque.pop();
}
Assert.assertEquals(49995000, sum);
// Parallel execution of push on ConcurrentLinkedQueue will always result in correct execution.
range(1, 10000).parallel().forEach(value -> deque.push(value));
sum = 0;
while(deque.peek() != null) {
sum += deque.pop();
}
Assert.assertEquals(49995000, sum);
}
@Test
public void givenArrayDeque_whenExecutedParallel_thenShouldFail() {
ArrayDeque<Integer> deque = new ArrayDeque<>();
// Serial execution of push on ArrayDeque will always result in correct execution.
range(1, 10000).forEach(value -> deque.push(value));
int sum = 0;
while(deque.peek() != null) {
sum += deque.pop();
}
Assert.assertEquals(49995000, sum);
// Parallel execution of push on ArrayDeque will not result in correct execution.
range(1, 10000).parallel().forEach(value -> deque.push(value));
sum = 0;
while(deque.peek() != null) {
sum += deque.pop();
}
// This shouldn't happen.
if(sum == 49995000) {
System.out.println("Something wrong in the environment, Please try some big value and check");
// To safe-guard build without test failures.
return;
}
Assert.assertNotEquals(49995000, sum);
}
}
@@ -0,0 +1,63 @@
package com.baeldung.stack_tests;
import com.baeldung.thread_safe_lifo.DequeBasedSynchronizedStack;
import com.google.common.collect.Streams;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Collections;
import java.util.Stack;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.stream.Stream;
import static java.util.stream.IntStream.range;
/**
* These tests are to understand the Stack implementation in Java Collections.
*/
public class StackUnitTest {
@Test
public void givenStack_whenPushPopPeek_thenWorkRight() {
Stack<String> namesStack = new Stack<>();
namesStack.push("Bill Gates");
namesStack.push("Elon Musk");
Assert.assertEquals("Elon Musk", namesStack.peek());
Assert.assertEquals("Elon Musk", namesStack.pop());
Assert.assertEquals("Bill Gates", namesStack.pop());
Assert.assertEquals(0, namesStack.size());
}
@Test
public void givenSynchronizedDeque_whenPushPopPeek_thenWorkRight() {
DequeBasedSynchronizedStack<String> namesStack = new DequeBasedSynchronizedStack<>();
namesStack.push("Bill Gates");
namesStack.push("Elon Musk");
Assert.assertEquals("Elon Musk", namesStack.peek());
Assert.assertEquals("Elon Musk", namesStack.pop());
Assert.assertEquals("Bill Gates", namesStack.pop());
Assert.assertEquals(0, namesStack.size());
}
@Test
public void givenConcurrentLinkedDeque_whenPushPopPeek_thenWorkRight() {
ConcurrentLinkedDeque<String> namesStack = new ConcurrentLinkedDeque<>();
namesStack.push("Bill Gates");
namesStack.push("Elon Musk");
Assert.assertEquals("Elon Musk", namesStack.peek());
Assert.assertEquals("Elon Musk", namesStack.pop());
Assert.assertEquals("Bill Gates", namesStack.pop());
Assert.assertEquals(0, namesStack.size());
}
}