Refactor a method to using stream APIIs there a concise way to iterate over a stream with indices in Java 8?Why does Stream<T> not implement Iterable<T>?Should I always use a parallel stream when possible?Custom thread pool in Java 8 parallel streamHow to Convert a Java 8 Stream to an Array?Convert Iterable to Stream using Java 8 JDKWhat's the difference between map and flatMap methods in Java 8?Why are Java Streams once-off?How to sum a list of integers with java streams?Populate a map conditionally using streams - Java 8
To what extent does asymmetric cryptography secure bitcoin transactions?
Which family is it?
Should I have one hand on the throttle during engine ignition?
What is the function of "mal" in saying "Das nenn ich mal ein X"?
Somebody hacked my clock
Improving an O(N^2) function (all entities iterating over all other entities)
Should I have shared a document with a former employee?
Why does a tetrahedral molecule like methane have a dipole moment of zero?
How to not confuse readers with simultaneous events?
What is the intuition for higher homotopy groups not vanishing?
Term for future-tense technique that isn't exactly foreshadowing
I have found a mistake on someone's code published online: what is the protocol?
When a ball on a rope swings in a circle, is there both centripetal force and tension force?
Last-minute canceled work-trip means I'll lose thousands of dollars on planned vacation
Which modern firearm should a time traveler bring to be easily reproducible for a historic civilization?
Extract the attribute names from a large number of Shapefiles
Why teach C using scanf without talking about command line arguments?
Authorship dispute on a paper that came out of a final report of a course?
Simplest instruction set that has an c++/C compiler to write an emulator for?
Three Subway Escalators
Why is carrying a heavy object more taxing on the body than pushing the same object on wheels?
Why is the Intel 8086 CPU called a 16-bit CPU?
Parser for STL stereolithography data files
Why did my "seldom" get corrected?
Refactor a method to using stream API
Is there a concise way to iterate over a stream with indices in Java 8?Why does Stream<T> not implement Iterable<T>?Should I always use a parallel stream when possible?Custom thread pool in Java 8 parallel streamHow to Convert a Java 8 Stream to an Array?Convert Iterable to Stream using Java 8 JDKWhat's the difference between map and flatMap methods in Java 8?Why are Java Streams once-off?How to sum a list of integers with java streams?Populate a map conditionally using streams - Java 8
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I am currently told to count all .sql files which are hangin' out on some servers. Manually solving this very basic task is not an option, instead, I wrote some code that makes use of a SimpleFileVisitor<Path>
and stores all the sql files found along with its parent path in a Map<Path, List<Path>>
.
Now I want to receive the total amount of sql files found independent from their locations. I got it working with an enhanced for
loop (almost the classic way):
public int getTotalAmountOfSqlFiles(Map<Path, List<Path>> sqlFilesInDirectories)
int totalAmount = 0;
for (Path directory : sqlFilesInDirectories.keySet())
List<Path> sqlFiles = sqlFilesInDirectories.get(directory);
totalAmount += sqlFiles.size();
return totalAmount;
The question is now, how can I do the same using the stream API?
I wasn't able to get compilable code to work which isn't obviously doing the wrong thing.
The following line looks like a good idea to me, but not to the compiler, unfortunately.
totalAmount = sqlFilesInDirectories.entrySet().stream().map(List::size).sum();
The compiler says
Cannot infer type argument(s) for
<R> map(Function<? super T,? extends R>
Does anyone know what I am doing wrong (and maybe provide some educated stream-API using solution)?
java java-8 sum java-stream
add a comment |
I am currently told to count all .sql files which are hangin' out on some servers. Manually solving this very basic task is not an option, instead, I wrote some code that makes use of a SimpleFileVisitor<Path>
and stores all the sql files found along with its parent path in a Map<Path, List<Path>>
.
Now I want to receive the total amount of sql files found independent from their locations. I got it working with an enhanced for
loop (almost the classic way):
public int getTotalAmountOfSqlFiles(Map<Path, List<Path>> sqlFilesInDirectories)
int totalAmount = 0;
for (Path directory : sqlFilesInDirectories.keySet())
List<Path> sqlFiles = sqlFilesInDirectories.get(directory);
totalAmount += sqlFiles.size();
return totalAmount;
The question is now, how can I do the same using the stream API?
I wasn't able to get compilable code to work which isn't obviously doing the wrong thing.
The following line looks like a good idea to me, but not to the compiler, unfortunately.
totalAmount = sqlFilesInDirectories.entrySet().stream().map(List::size).sum();
The compiler says
Cannot infer type argument(s) for
<R> map(Function<? super T,? extends R>
Does anyone know what I am doing wrong (and maybe provide some educated stream-API using solution)?
java java-8 sum java-stream
add a comment |
I am currently told to count all .sql files which are hangin' out on some servers. Manually solving this very basic task is not an option, instead, I wrote some code that makes use of a SimpleFileVisitor<Path>
and stores all the sql files found along with its parent path in a Map<Path, List<Path>>
.
Now I want to receive the total amount of sql files found independent from their locations. I got it working with an enhanced for
loop (almost the classic way):
public int getTotalAmountOfSqlFiles(Map<Path, List<Path>> sqlFilesInDirectories)
int totalAmount = 0;
for (Path directory : sqlFilesInDirectories.keySet())
List<Path> sqlFiles = sqlFilesInDirectories.get(directory);
totalAmount += sqlFiles.size();
return totalAmount;
The question is now, how can I do the same using the stream API?
I wasn't able to get compilable code to work which isn't obviously doing the wrong thing.
The following line looks like a good idea to me, but not to the compiler, unfortunately.
totalAmount = sqlFilesInDirectories.entrySet().stream().map(List::size).sum();
The compiler says
Cannot infer type argument(s) for
<R> map(Function<? super T,? extends R>
Does anyone know what I am doing wrong (and maybe provide some educated stream-API using solution)?
java java-8 sum java-stream
I am currently told to count all .sql files which are hangin' out on some servers. Manually solving this very basic task is not an option, instead, I wrote some code that makes use of a SimpleFileVisitor<Path>
and stores all the sql files found along with its parent path in a Map<Path, List<Path>>
.
Now I want to receive the total amount of sql files found independent from their locations. I got it working with an enhanced for
loop (almost the classic way):
public int getTotalAmountOfSqlFiles(Map<Path, List<Path>> sqlFilesInDirectories)
int totalAmount = 0;
for (Path directory : sqlFilesInDirectories.keySet())
List<Path> sqlFiles = sqlFilesInDirectories.get(directory);
totalAmount += sqlFiles.size();
return totalAmount;
The question is now, how can I do the same using the stream API?
I wasn't able to get compilable code to work which isn't obviously doing the wrong thing.
The following line looks like a good idea to me, but not to the compiler, unfortunately.
totalAmount = sqlFilesInDirectories.entrySet().stream().map(List::size).sum();
The compiler says
Cannot infer type argument(s) for
<R> map(Function<? super T,? extends R>
Does anyone know what I am doing wrong (and maybe provide some educated stream-API using solution)?
java java-8 sum java-stream
java java-8 sum java-stream
edited Mar 26 at 12:01
Stefan Zobel
2,5203 gold badges20 silver badges31 bronze badges
2,5203 gold badges20 silver badges31 bronze badges
asked Mar 26 at 11:44
deHaardeHaar
3,2046 gold badges20 silver badges31 bronze badges
3,2046 gold badges20 silver badges31 bronze badges
add a comment |
add a comment |
4 Answers
4
active
oldest
votes
Not sure why people are involving keySet
here when the required sum is only of List size contained in values. Just sum the size of all values.
return sqlFilesInDirectories.values().stream().mapToInt(List::size).sum();
And even the for loop version should be simply this,
for (List<Path> list : sqlFilesInDirectories.values())
totalAmount += list.size();
As iterating over keyset and then getting value from map isn't really required and will not be better performance wise.
add a comment |
It's because in stream you're taking whole entries instead of values. This should do it:
totalAmount = sqlFilesInDirectories.values().stream().map(List::size).sum();
add a comment |
Other answers provide the shortest way to sum all entries, but if you need the amount of scripts per Path
you can use the following:
Map<Path, Integer> amountOfFilesForPath =
files.entrySet().stream().collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.summingInt(value -> value.getValue().size())));
And you can also get the total value:
int sum = amountOfFilesForPath.values().stream().mapToInt(Integer::intValue).sum();
add a comment |
Try
int totalAmount = sqlFilesInDirectories.keySet().stream().map(sqlFilesInDirectories::get).mapToInt(List::size).sum();
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%2f55356349%2frefactor-a-method-to-using-stream-api%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
Not sure why people are involving keySet
here when the required sum is only of List size contained in values. Just sum the size of all values.
return sqlFilesInDirectories.values().stream().mapToInt(List::size).sum();
And even the for loop version should be simply this,
for (List<Path> list : sqlFilesInDirectories.values())
totalAmount += list.size();
As iterating over keyset and then getting value from map isn't really required and will not be better performance wise.
add a comment |
Not sure why people are involving keySet
here when the required sum is only of List size contained in values. Just sum the size of all values.
return sqlFilesInDirectories.values().stream().mapToInt(List::size).sum();
And even the for loop version should be simply this,
for (List<Path> list : sqlFilesInDirectories.values())
totalAmount += list.size();
As iterating over keyset and then getting value from map isn't really required and will not be better performance wise.
add a comment |
Not sure why people are involving keySet
here when the required sum is only of List size contained in values. Just sum the size of all values.
return sqlFilesInDirectories.values().stream().mapToInt(List::size).sum();
And even the for loop version should be simply this,
for (List<Path> list : sqlFilesInDirectories.values())
totalAmount += list.size();
As iterating over keyset and then getting value from map isn't really required and will not be better performance wise.
Not sure why people are involving keySet
here when the required sum is only of List size contained in values. Just sum the size of all values.
return sqlFilesInDirectories.values().stream().mapToInt(List::size).sum();
And even the for loop version should be simply this,
for (List<Path> list : sqlFilesInDirectories.values())
totalAmount += list.size();
As iterating over keyset and then getting value from map isn't really required and will not be better performance wise.
edited Mar 26 at 12:01
answered Mar 26 at 11:53
Pushpesh Kumar RajwanshiPushpesh Kumar Rajwanshi
17k2 gold badges13 silver badges33 bronze badges
17k2 gold badges13 silver badges33 bronze badges
add a comment |
add a comment |
It's because in stream you're taking whole entries instead of values. This should do it:
totalAmount = sqlFilesInDirectories.values().stream().map(List::size).sum();
add a comment |
It's because in stream you're taking whole entries instead of values. This should do it:
totalAmount = sqlFilesInDirectories.values().stream().map(List::size).sum();
add a comment |
It's because in stream you're taking whole entries instead of values. This should do it:
totalAmount = sqlFilesInDirectories.values().stream().map(List::size).sum();
It's because in stream you're taking whole entries instead of values. This should do it:
totalAmount = sqlFilesInDirectories.values().stream().map(List::size).sum();
answered Mar 26 at 11:48
AndronicusAndronicus
7,7653 gold badges20 silver badges37 bronze badges
7,7653 gold badges20 silver badges37 bronze badges
add a comment |
add a comment |
Other answers provide the shortest way to sum all entries, but if you need the amount of scripts per Path
you can use the following:
Map<Path, Integer> amountOfFilesForPath =
files.entrySet().stream().collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.summingInt(value -> value.getValue().size())));
And you can also get the total value:
int sum = amountOfFilesForPath.values().stream().mapToInt(Integer::intValue).sum();
add a comment |
Other answers provide the shortest way to sum all entries, but if you need the amount of scripts per Path
you can use the following:
Map<Path, Integer> amountOfFilesForPath =
files.entrySet().stream().collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.summingInt(value -> value.getValue().size())));
And you can also get the total value:
int sum = amountOfFilesForPath.values().stream().mapToInt(Integer::intValue).sum();
add a comment |
Other answers provide the shortest way to sum all entries, but if you need the amount of scripts per Path
you can use the following:
Map<Path, Integer> amountOfFilesForPath =
files.entrySet().stream().collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.summingInt(value -> value.getValue().size())));
And you can also get the total value:
int sum = amountOfFilesForPath.values().stream().mapToInt(Integer::intValue).sum();
Other answers provide the shortest way to sum all entries, but if you need the amount of scripts per Path
you can use the following:
Map<Path, Integer> amountOfFilesForPath =
files.entrySet().stream().collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.summingInt(value -> value.getValue().size())));
And you can also get the total value:
int sum = amountOfFilesForPath.values().stream().mapToInt(Integer::intValue).sum();
answered Mar 26 at 12:13
GlainsGlains
1,3529 silver badges20 bronze badges
1,3529 silver badges20 bronze badges
add a comment |
add a comment |
Try
int totalAmount = sqlFilesInDirectories.keySet().stream().map(sqlFilesInDirectories::get).mapToInt(List::size).sum();
add a comment |
Try
int totalAmount = sqlFilesInDirectories.keySet().stream().map(sqlFilesInDirectories::get).mapToInt(List::size).sum();
add a comment |
Try
int totalAmount = sqlFilesInDirectories.keySet().stream().map(sqlFilesInDirectories::get).mapToInt(List::size).sum();
Try
int totalAmount = sqlFilesInDirectories.keySet().stream().map(sqlFilesInDirectories::get).mapToInt(List::size).sum();
answered Mar 26 at 11:50
Praveen EPraveen E
6005 silver badges8 bronze badges
6005 silver badges8 bronze badges
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.
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%2f55356349%2frefactor-a-method-to-using-stream-api%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