diff --git a/core-java-modules/core-java-collections-7/src/main/java/com/baeldung/entitycollection/IdExtractor.java b/core-java-modules/core-java-collections-7/src/main/java/com/baeldung/entitycollection/IdExtractor.java new file mode 100644 index 000000000000..2503b1b8d387 --- /dev/null +++ b/core-java-modules/core-java-collections-7/src/main/java/com/baeldung/entitycollection/IdExtractor.java @@ -0,0 +1,27 @@ +package com.baeldung.entitycollection; + +import java.util.*; +import java.util.stream.Collectors; + +public class IdExtractor { + + public static List extractIdsClassic(List users) { + List ids = new ArrayList<>(); + for (User user : users) { + ids.add(user.getId()); + } + return ids; + } + + public static List extractIdsStream(List users) { + return users.stream() + .map(User::getId) + .collect(Collectors.toList()); + } + + public static Set extractUniqueIds(List users) { + return users.stream() + .map(User::getId) + .collect(Collectors.toSet()); + } +} diff --git a/core-java-modules/core-java-collections-7/src/main/java/com/baeldung/entitycollection/User.java b/core-java-modules/core-java-collections-7/src/main/java/com/baeldung/entitycollection/User.java new file mode 100644 index 000000000000..f5a0bb0e2e68 --- /dev/null +++ b/core-java-modules/core-java-collections-7/src/main/java/com/baeldung/entitycollection/User.java @@ -0,0 +1,15 @@ +package com.baeldung.entitycollection; + +public class User { + private final Long id; + private final String name; + + public User(Long id, String name) { + this.id = id; + this.name = name; + } + + public Long getId() { + return id; + } +} diff --git a/core-java-modules/core-java-collections-7/src/test/java/com/baeldung/entitycollection/IdExtractionUnitTest.java b/core-java-modules/core-java-collections-7/src/test/java/com/baeldung/entitycollection/IdExtractionUnitTest.java new file mode 100644 index 000000000000..34187a9e9b74 --- /dev/null +++ b/core-java-modules/core-java-collections-7/src/test/java/com/baeldung/entitycollection/IdExtractionUnitTest.java @@ -0,0 +1,79 @@ +package com.baeldung.entitycollection; + +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +class IdExtractionUnitTest { + + @Test + void givenListOfUsers_whenUsingClassicLoop_thenReturnListOfIds() { + List users = Arrays.asList( + new User(1L, "A"), + new User(2L, "B"), + new User(3L, "C") + ); + + List ids = IdExtractor.extractIdsClassic(users); + + assertEquals(Arrays.asList(1L, 2L, 3L), ids); + } + + @Test + void givenEmptyUsersList_whenUsingClassicLoop_thenReturnEmptyList() { + List users = List.of(); + List ids = IdExtractor.extractIdsClassic(users); + assertTrue(ids.isEmpty()); + } + + @Test + void givenUsersList_whenUsingStream_thenReturnListOfIds() { + List users = Arrays.asList( + new User(10L, "A"), + new User(20L, "B") + ); + + List ids = IdExtractor.extractIdsStream(users); + assertEquals(Arrays.asList(10L, 20L), ids); + } + + @Test + void givenEmptyUsersList_whenUsingStream_thenReturnEmptyList() { + List users = List.of(); + List ids = IdExtractor.extractIdsStream(users); + assertTrue(ids.isEmpty()); + } + + @Test + void givenUsersWithNullIds_whenUsingStream_thenAllowNullValuesInList() { + List users = Arrays.asList( + new User(null, "A"), + new User(5L, "B") + ); + + List ids = IdExtractor.extractIdsStream(users); + assertEquals(Arrays.asList(null, 5L), ids); + } + + @Test + void givenUsersWithDuplicateIds_whenUsingUniqueIdExtractor_thenReturnUniqueSet() { + List users = Arrays.asList( + new User(1L, "A"), + new User(1L, "B"), + new User(2L, "C") + ); + + Set ids = IdExtractor.extractUniqueIds(users); + assertEquals(Set.of(1L, 2L), ids); + } + + @Test + void givenEmptyUsersList_whenUsingUniqueIdExtractor_thenReturnEmptySet() { + List users = List.of(); + Set ids = IdExtractor.extractUniqueIds(users); + assertTrue(ids.isEmpty()); + } +} +