2
2
3
3
import java .util .ArrayList ;
4
4
import java .util .Comparator ;
5
- import java .util .HashMap ;
6
5
import java .util .LinkedHashMap ;
7
6
import java .util .List ;
8
7
import java .util .Map ;
9
8
import java .util .Objects ;
10
9
import java .util .function .Function ;
11
10
import java .util .function .Predicate ;
12
11
import java .util .stream .Collectors ;
13
- import lombok .AllArgsConstructor ;
14
- import lombok .Data ;
15
12
16
13
public class FilterAMap {
17
14
15
+ @ SuppressWarnings ("unused" )
18
16
public static void main (String [] args ) {
19
17
20
18
Map <Integer , User > usersMap = Map .of (
@@ -27,7 +25,7 @@ public static void main(String[] args) {
27
25
7 , new User (7 , "Don" ),
28
26
8 , new User (8 , "Dave" ));
29
27
30
- //1
28
+ // Collect Keys filtered by List of Keys
31
29
List <Integer > idList = List .of (1 , 3 , 5 , 7 );
32
30
33
31
Map <Integer , User > filteredMap1 = usersMap .entrySet ()
@@ -37,36 +35,38 @@ public static void main(String[] args) {
37
35
38
36
System .out .println (filteredMap1 );
39
37
38
+ // Collect entries filtered by List of Keys
39
+
40
40
Map <Integer , User > filteredMap2 = usersMap .entrySet ()
41
41
.stream ()
42
- .filter (entry -> idList .contains (entry .getValue ().getId ()))
42
+ .filter (entry -> idList .contains (entry .getValue ().id ()))
43
43
.collect (Collectors .toUnmodifiableMap (Map .Entry ::getKey , Map .Entry ::getValue ));
44
44
45
45
System .out .println (filteredMap2 );
46
46
47
- //2
47
+ // Collect Values filtered by List of Keys
48
48
49
49
List <User > usersList1 = usersMap .values ()
50
50
.stream ()
51
- .filter (user -> idList .contains (user .getId ()))
52
- .collect ( Collectors . toUnmodifiableList () );
51
+ .filter (user -> idList .contains (user .id ()))
52
+ .toList ( );
53
53
54
54
System .out .println (usersList1 );
55
55
56
56
//3
57
57
List <User > usersList2 = new ArrayList <>();
58
58
59
- usersMap .entrySet (). forEach (entry -> {
60
- if (idList .contains (entry . getValue (). getId ())) {
61
- usersList2 .add (entry . getValue () );
59
+ usersMap .forEach (( _ , value ) -> {
60
+ if (idList .contains (value . id ())) {
61
+ usersList2 .add (value );
62
62
}
63
63
});
64
64
65
65
System .out .println (usersList2 );
66
66
67
67
System .out .println ("====================" );
68
68
69
- //4 Using filters
69
+ // Using Generic filters
70
70
Predicate <Integer > predicate = key -> key > 4 ;
71
71
Comparator <Integer > comparator = Comparator .comparing (Function .identity ());
72
72
@@ -76,22 +76,23 @@ public static void main(String[] args) {
76
76
Map <Integer , User > filteredAndSortedMap = Filters .sortedByKey (usersMap , predicate , comparator );
77
77
System .out .println (filteredAndSortedMap );
78
78
79
- Map <Integer , User > filteredAndSortedMapReversed = Filters .sortedByKeyReversed (usersMap , predicate , comparator );
80
- System .out .println (filteredAndSortedMapReversed );
81
-
82
- Predicate <User > valuePredicate = user -> user .getName ().startsWith ("A" );
83
- Comparator <User > valueComparator = Comparator .comparing (User ::getName );
79
+ Predicate <User > valuePredicate = user -> user .name ().startsWith ("D" );
80
+ Comparator <User > valueComparator = Comparator .comparing (User ::name );
84
81
85
82
Map <Integer , User > filteredMapByValue = Filters .byValue (usersMap , valuePredicate );
86
83
System .out .println (filteredMapByValue );
87
84
88
- Map <Integer , User > filteredAndSortedMapByValue = Filters .sortedByValue (usersMap , valuePredicate , valueComparator );
85
+ Map <Integer , User > filteredAndSortedMapByValue = Filters .sortedByValue (usersMap , valuePredicate ,
86
+ valueComparator );
89
87
System .out .println (filteredAndSortedMapByValue );
90
88
91
- Map <Integer , User > filteredAndSortedMapReversedByValue = Filters .sortedByValueReversed (usersMap , valuePredicate , valueComparator );
92
- System .out .println (filteredAndSortedMapReversedByValue );
89
+ Map <Integer , User > filteredMapByKeyAndValue = Filters .byValue (
90
+ Filters .byKey (usersMap , predicate ), valuePredicate );
91
+ System .out .println (filteredMapByKeyAndValue );
93
92
94
- Map <Integer , User > filteredMapByKeyAndValue = Filters .byValue (Filters .byKey (usersMap , predicate ), valuePredicate );
93
+ Map <Integer , User > filteredMapByKeyAndValue_V2 = usersMap .entrySet ().stream ()
94
+ .filter ((entry ) -> entry .getKey () > 4 && entry .getValue ().name ().startsWith ("D" ))
95
+ .collect (Collectors .toMap (Map .Entry ::getKey , Map .Entry ::getValue ));
95
96
System .out .println (filteredMapByKeyAndValue );
96
97
}
97
98
@@ -101,8 +102,7 @@ private Filters() {
101
102
throw new AssertionError ("Cannot be instantiated" );
102
103
}
103
104
104
- public static <K , V > Map <K , V > byKey (
105
- Map <K , V > map , Predicate <K > predicate ) {
105
+ public static <K , V > Map <K , V > byKey (Map <K , V > map , Predicate <K > predicate ) {
106
106
107
107
Objects .requireNonNull (map );
108
108
Objects .requireNonNull (predicate );
@@ -127,18 +127,9 @@ public static <K, V> Map<K, V> sortedByKey(
127
127
.sorted (Map .Entry .comparingByKey (c ))
128
128
.collect (Collectors .toMap (
129
129
Map .Entry ::getKey , Map .Entry ::getValue ,
130
- (c1 , c2 ) -> c2 , LinkedHashMap ::new ));
130
+ (_ , c2 ) -> c2 , LinkedHashMap ::new ));
131
131
}
132
132
133
- public static <K , V > Map <K , V > sortedByKeyReversed (
134
- Map <K , V > map , Predicate <K > predicate , Comparator <K > c ) {
135
-
136
- Objects .requireNonNull (map );
137
- Objects .requireNonNull (predicate );
138
- Objects .requireNonNull (c );
139
-
140
- return sortedByKey (map , predicate , c .reversed ());
141
- }
142
133
143
134
public static <K , V > Map <K , V > byValue (
144
135
Map <K , V > map , Predicate <V > predicate ) {
@@ -166,25 +157,10 @@ public static <K, V> Map<K, V> sortedByValue(Map<K, V> map,
166
157
.sorted (Map .Entry .comparingByValue (c ))
167
158
.collect (Collectors .toMap (
168
159
Map .Entry ::getKey , Map .Entry ::getValue ,
169
- (c1 , c2 ) -> c2 , LinkedHashMap ::new ));
170
- }
171
-
172
- public static <K , V > Map <K , V > sortedByValueReversed (Map <K , V > map ,
173
- Predicate <V > predicate , Comparator <V > c ) {
174
-
175
- Objects .requireNonNull (map );
176
- Objects .requireNonNull (predicate );
177
- Objects .requireNonNull (c );
178
-
179
- return sortedByValue (map , predicate , c .reversed ());
160
+ (_ , c2 ) -> c2 , LinkedHashMap ::new ));
180
161
}
181
162
}
182
163
}
183
164
184
- @ Data
185
- @ AllArgsConstructor
186
- class User {
187
-
188
- Integer id ;
189
- String name ;
190
- }
165
+ record User (Integer id , String name ) {
166
+ }
0 commit comments