How to get a List from a HashMap<String,List>
I want to extract a List<E>
from a Map<String,List<E>>
(E
is a random Class) using stream()
.
I want a simple one-line method using java 8's stream.
What I have tried until now :
HashMap<String,List<E>> map = new HashMap<>();
List<E> list = map.values(); // does not compile
list = map.values().stream().collect(Collectors.toList()); // does not compile
java collections java-8 java-stream collectors
add a comment |
I want to extract a List<E>
from a Map<String,List<E>>
(E
is a random Class) using stream()
.
I want a simple one-line method using java 8's stream.
What I have tried until now :
HashMap<String,List<E>> map = new HashMap<>();
List<E> list = map.values(); // does not compile
list = map.values().stream().collect(Collectors.toList()); // does not compile
java collections java-8 java-stream collectors
add a comment |
I want to extract a List<E>
from a Map<String,List<E>>
(E
is a random Class) using stream()
.
I want a simple one-line method using java 8's stream.
What I have tried until now :
HashMap<String,List<E>> map = new HashMap<>();
List<E> list = map.values(); // does not compile
list = map.values().stream().collect(Collectors.toList()); // does not compile
java collections java-8 java-stream collectors
I want to extract a List<E>
from a Map<String,List<E>>
(E
is a random Class) using stream()
.
I want a simple one-line method using java 8's stream.
What I have tried until now :
HashMap<String,List<E>> map = new HashMap<>();
List<E> list = map.values(); // does not compile
list = map.values().stream().collect(Collectors.toList()); // does not compile
java collections java-8 java-stream collectors
java collections java-8 java-stream collectors
edited 1 hour ago
Nicholas K
5,81951031
5,81951031
asked 12 hours ago
Yassine Ben Hamida
14111
14111
add a comment |
add a comment |
6 Answers
6
active
oldest
votes
map.values()
returns a Collection<List<E>>
not a List<E>
, if you want the latter then you're required to flatten the nested List<E>
into a single List<E>
as follows:
List<E> result = map.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
add a comment |
Here's an alternate way to do it with Java-9 and above:
List<E> result = map.values()
.stream()
.collect(Collectors.flatMapping(List::stream, Collectors.toList()));
6
Just the apiNote :- TheflatMapping()
collectors are most useful when used in a multi-level reduction, such as downstream of agroupingBy
orpartitioningBy
.
– nullpointer
12 hours ago
3
It decreases indeed the readability here. The Java 8 way is clearly more relevant here.
– davidxxx
12 hours ago
2
In fact it is not the Java 9 solution. It is a way possible with Java 9. But the Java 9 way to favor is of course the same as with Java 8 : stackoverflow.com/a/54054456/270371
– davidxxx
12 hours ago
add a comment |
In addition to other answers:
List<E> result = map.values()
.stream()
.collect(ArrayList::new, List::addAll, List::addAll);
This could also do the trick.
add a comment |
Or use forEach
map.forEach((k,v)->list.addAll(v));
or as Aomine commented use this
map.values().forEach(list::addAll);
3
good idea in showing a non-stream version. btw it would be better to iterate over thevalues
since you're not doing anything with thek
i.e. you can doList<String> result = new ArrayList<>(); map.values().forEach(result::addAll);
– Aomine
12 hours ago
add a comment |
You can use Collection.stream
with flatMap
as:
Map<String, List<E>> map = new HashMap<>(); // program to interface
List<E> list = map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
or use a non-stream version as:
List<E> list = new ArrayList<>();
map.values().forEach(list::addAll)
add a comment |
Simply use :-
map.values().stream().flatMap(List::stream).collect(Collectors.toList());
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54054448%2fhow-to-get-a-liste-from-a-hashmapstring-liste%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
6 Answers
6
active
oldest
votes
6 Answers
6
active
oldest
votes
active
oldest
votes
active
oldest
votes
map.values()
returns a Collection<List<E>>
not a List<E>
, if you want the latter then you're required to flatten the nested List<E>
into a single List<E>
as follows:
List<E> result = map.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
add a comment |
map.values()
returns a Collection<List<E>>
not a List<E>
, if you want the latter then you're required to flatten the nested List<E>
into a single List<E>
as follows:
List<E> result = map.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
add a comment |
map.values()
returns a Collection<List<E>>
not a List<E>
, if you want the latter then you're required to flatten the nested List<E>
into a single List<E>
as follows:
List<E> result = map.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
map.values()
returns a Collection<List<E>>
not a List<E>
, if you want the latter then you're required to flatten the nested List<E>
into a single List<E>
as follows:
List<E> result = map.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
answered 12 hours ago
Aomine
40.7k73870
40.7k73870
add a comment |
add a comment |
Here's an alternate way to do it with Java-9 and above:
List<E> result = map.values()
.stream()
.collect(Collectors.flatMapping(List::stream, Collectors.toList()));
6
Just the apiNote :- TheflatMapping()
collectors are most useful when used in a multi-level reduction, such as downstream of agroupingBy
orpartitioningBy
.
– nullpointer
12 hours ago
3
It decreases indeed the readability here. The Java 8 way is clearly more relevant here.
– davidxxx
12 hours ago
2
In fact it is not the Java 9 solution. It is a way possible with Java 9. But the Java 9 way to favor is of course the same as with Java 8 : stackoverflow.com/a/54054456/270371
– davidxxx
12 hours ago
add a comment |
Here's an alternate way to do it with Java-9 and above:
List<E> result = map.values()
.stream()
.collect(Collectors.flatMapping(List::stream, Collectors.toList()));
6
Just the apiNote :- TheflatMapping()
collectors are most useful when used in a multi-level reduction, such as downstream of agroupingBy
orpartitioningBy
.
– nullpointer
12 hours ago
3
It decreases indeed the readability here. The Java 8 way is clearly more relevant here.
– davidxxx
12 hours ago
2
In fact it is not the Java 9 solution. It is a way possible with Java 9. But the Java 9 way to favor is of course the same as with Java 8 : stackoverflow.com/a/54054456/270371
– davidxxx
12 hours ago
add a comment |
Here's an alternate way to do it with Java-9 and above:
List<E> result = map.values()
.stream()
.collect(Collectors.flatMapping(List::stream, Collectors.toList()));
Here's an alternate way to do it with Java-9 and above:
List<E> result = map.values()
.stream()
.collect(Collectors.flatMapping(List::stream, Collectors.toList()));
edited 29 mins ago
nullpointer
43.4k1093178
43.4k1093178
answered 12 hours ago
Ravindra Ranwala
8,53231634
8,53231634
6
Just the apiNote :- TheflatMapping()
collectors are most useful when used in a multi-level reduction, such as downstream of agroupingBy
orpartitioningBy
.
– nullpointer
12 hours ago
3
It decreases indeed the readability here. The Java 8 way is clearly more relevant here.
– davidxxx
12 hours ago
2
In fact it is not the Java 9 solution. It is a way possible with Java 9. But the Java 9 way to favor is of course the same as with Java 8 : stackoverflow.com/a/54054456/270371
– davidxxx
12 hours ago
add a comment |
6
Just the apiNote :- TheflatMapping()
collectors are most useful when used in a multi-level reduction, such as downstream of agroupingBy
orpartitioningBy
.
– nullpointer
12 hours ago
3
It decreases indeed the readability here. The Java 8 way is clearly more relevant here.
– davidxxx
12 hours ago
2
In fact it is not the Java 9 solution. It is a way possible with Java 9. But the Java 9 way to favor is of course the same as with Java 8 : stackoverflow.com/a/54054456/270371
– davidxxx
12 hours ago
6
6
Just the apiNote :- The
flatMapping()
collectors are most useful when used in a multi-level reduction, such as downstream of a groupingBy
or partitioningBy
.– nullpointer
12 hours ago
Just the apiNote :- The
flatMapping()
collectors are most useful when used in a multi-level reduction, such as downstream of a groupingBy
or partitioningBy
.– nullpointer
12 hours ago
3
3
It decreases indeed the readability here. The Java 8 way is clearly more relevant here.
– davidxxx
12 hours ago
It decreases indeed the readability here. The Java 8 way is clearly more relevant here.
– davidxxx
12 hours ago
2
2
In fact it is not the Java 9 solution. It is a way possible with Java 9. But the Java 9 way to favor is of course the same as with Java 8 : stackoverflow.com/a/54054456/270371
– davidxxx
12 hours ago
In fact it is not the Java 9 solution. It is a way possible with Java 9. But the Java 9 way to favor is of course the same as with Java 8 : stackoverflow.com/a/54054456/270371
– davidxxx
12 hours ago
add a comment |
In addition to other answers:
List<E> result = map.values()
.stream()
.collect(ArrayList::new, List::addAll, List::addAll);
This could also do the trick.
add a comment |
In addition to other answers:
List<E> result = map.values()
.stream()
.collect(ArrayList::new, List::addAll, List::addAll);
This could also do the trick.
add a comment |
In addition to other answers:
List<E> result = map.values()
.stream()
.collect(ArrayList::new, List::addAll, List::addAll);
This could also do the trick.
In addition to other answers:
List<E> result = map.values()
.stream()
.collect(ArrayList::new, List::addAll, List::addAll);
This could also do the trick.
answered 12 hours ago
ETO
1,886422
1,886422
add a comment |
add a comment |
Or use forEach
map.forEach((k,v)->list.addAll(v));
or as Aomine commented use this
map.values().forEach(list::addAll);
3
good idea in showing a non-stream version. btw it would be better to iterate over thevalues
since you're not doing anything with thek
i.e. you can doList<String> result = new ArrayList<>(); map.values().forEach(result::addAll);
– Aomine
12 hours ago
add a comment |
Or use forEach
map.forEach((k,v)->list.addAll(v));
or as Aomine commented use this
map.values().forEach(list::addAll);
3
good idea in showing a non-stream version. btw it would be better to iterate over thevalues
since you're not doing anything with thek
i.e. you can doList<String> result = new ArrayList<>(); map.values().forEach(result::addAll);
– Aomine
12 hours ago
add a comment |
Or use forEach
map.forEach((k,v)->list.addAll(v));
or as Aomine commented use this
map.values().forEach(list::addAll);
Or use forEach
map.forEach((k,v)->list.addAll(v));
or as Aomine commented use this
map.values().forEach(list::addAll);
edited 12 hours ago
answered 12 hours ago
Hadi J
9,87231742
9,87231742
3
good idea in showing a non-stream version. btw it would be better to iterate over thevalues
since you're not doing anything with thek
i.e. you can doList<String> result = new ArrayList<>(); map.values().forEach(result::addAll);
– Aomine
12 hours ago
add a comment |
3
good idea in showing a non-stream version. btw it would be better to iterate over thevalues
since you're not doing anything with thek
i.e. you can doList<String> result = new ArrayList<>(); map.values().forEach(result::addAll);
– Aomine
12 hours ago
3
3
good idea in showing a non-stream version. btw it would be better to iterate over the
values
since you're not doing anything with the k
i.e. you can do List<String> result = new ArrayList<>(); map.values().forEach(result::addAll);
– Aomine
12 hours ago
good idea in showing a non-stream version. btw it would be better to iterate over the
values
since you're not doing anything with the k
i.e. you can do List<String> result = new ArrayList<>(); map.values().forEach(result::addAll);
– Aomine
12 hours ago
add a comment |
You can use Collection.stream
with flatMap
as:
Map<String, List<E>> map = new HashMap<>(); // program to interface
List<E> list = map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
or use a non-stream version as:
List<E> list = new ArrayList<>();
map.values().forEach(list::addAll)
add a comment |
You can use Collection.stream
with flatMap
as:
Map<String, List<E>> map = new HashMap<>(); // program to interface
List<E> list = map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
or use a non-stream version as:
List<E> list = new ArrayList<>();
map.values().forEach(list::addAll)
add a comment |
You can use Collection.stream
with flatMap
as:
Map<String, List<E>> map = new HashMap<>(); // program to interface
List<E> list = map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
or use a non-stream version as:
List<E> list = new ArrayList<>();
map.values().forEach(list::addAll)
You can use Collection.stream
with flatMap
as:
Map<String, List<E>> map = new HashMap<>(); // program to interface
List<E> list = map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
or use a non-stream version as:
List<E> list = new ArrayList<>();
map.values().forEach(list::addAll)
edited 1 hour ago
answered 12 hours ago
nullpointer
43.4k1093178
43.4k1093178
add a comment |
add a comment |
Simply use :-
map.values().stream().flatMap(List::stream).collect(Collectors.toList());
add a comment |
Simply use :-
map.values().stream().flatMap(List::stream).collect(Collectors.toList());
add a comment |
Simply use :-
map.values().stream().flatMap(List::stream).collect(Collectors.toList());
Simply use :-
map.values().stream().flatMap(List::stream).collect(Collectors.toList());
edited 1 hour ago
answered 12 hours ago
Nicholas K
5,81951031
5,81951031
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54054448%2fhow-to-get-a-liste-from-a-hashmapstring-liste%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown