diff --git a/libraries/src/main/java/com/baeldung/streamex/Role.java b/libraries/src/main/java/com/baeldung/streamex/Role.java new file mode 100644 index 0000000000..5709ca61f8 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/streamex/Role.java @@ -0,0 +1,5 @@ +package com.baeldung.streamex; + +public class Role { + +} diff --git a/libraries/src/main/java/com/baeldung/streamex/StreamEX.java b/libraries/src/main/java/com/baeldung/streamex/StreamEX.java new file mode 100644 index 0000000000..7cbfec4421 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/streamex/StreamEX.java @@ -0,0 +1,84 @@ +package com.baeldung.streamex; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import one.util.streamex.DoubleStreamEx; +import one.util.streamex.EntryStream; +import one.util.streamex.IntStreamEx; +import one.util.streamex.StreamEx; + +public class StreamEX { + + public static void main(String[] args) { + //Collector shortcut methods (toList, toSet, groupingBy, joining, etc.) + List users = Arrays.asList( + new User("name"), new User(), new User()); + users.stream() + .map(User::getName) + .collect(Collectors.toList()); + List userNames = StreamEx.of(users) + .map(User::getName) + .toList(); + Map> role2users = StreamEx.of(users) + .groupingBy(User::getRole); + StreamEx.of(1, 2, 3).joining("; "); // "1; 2; 3" + //Selecting stream elements of specific type + List usersAndRoles = Arrays.asList(new User(), new Role()); + List roles = IntStreamEx.range(usersAndRoles.size()) + .mapToObj(usersAndRoles::get) + .select(Role.class) + .toList(); + System.out.println(roles); + //adding elements to Stream + List appendedUsers = StreamEx.of(users) + .map(User::getName) + .prepend("(none)") + .append("LAST") + .toList(); + System.out.println(appendedUsers); + //Removing unwanted elements and using the stream as Iterable: + for (String line : StreamEx.of(users).map(User::getName) + .nonNull()) { + System.out.println(line); + } + //Selecting map keys by value predicate: + Map nameToRole = new HashMap<>(); + nameToRole.put("first", new Role()); + nameToRole.put("second", null); + Set nonNullRoles = StreamEx. + ofKeys(nameToRole, Objects::nonNull) + .toSet(); + System.out.println(nonNullRoles); + //Operating on key-value pairs: + Map> users2roles = transformMap(role2users); + Map mapToString = EntryStream.of(users2roles) + .mapKeys(String::valueOf) + .mapValues(String::valueOf) + .toMap(); + //Support of byte/char/short/float types: + short[] src = {1, 2, 3}; + char[] output = IntStreamEx.of(src) + .map(x -> x * 5) + .toCharArray(); + } + + public double[] getDiffBetweenPairs(double... numbers) { + return DoubleStreamEx.of(numbers) + .pairMap((a, b) -> b - a).toArray(); + } + + public static Map> transformMap( + Map> role2users) { + Map> users2roles = EntryStream.of(role2users) + .flatMapValues(List::stream) + .invert() + .grouping(); + return users2roles; + } + +} diff --git a/libraries/src/main/java/com/baeldung/streamex/User.java b/libraries/src/main/java/com/baeldung/streamex/User.java new file mode 100644 index 0000000000..e37eb014c5 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/streamex/User.java @@ -0,0 +1,40 @@ +package com.baeldung.streamex; + +public class User { + + int id; + String name; + Role role = new Role(); + + public User() { + } + + public User(String name) { + this.name = 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; + } + + public Role getRole() { + return role; + } + + public void setRole(Role role) { + this.role = role; + } + +}