Java 8 stream Map<String, List<String>> sum of values for each key

  • A+
Category:Languages

I am not so familiar with Java 8 (still learning) and looking to see if I could find something equivalent of the below code using streams.

The below code mainly tries to get corresponding double value for each value in String and then sums it up. I could not find much help anywhere on this format. I am not sure if using streams would clean up the code or would make it messier.

// safe assumptions - String/List (Key/Value) cannot be null or empty // inputMap --> Map<String, List<String>>  Map<String, Double> finalResult = new HashMap<>(); for (Map.Entry<String, List<String>> entry : inputMap.entrySet()) {     Double score = 0.0;     for (String current: entry.getValue()) {         score += computeScore(current);     }     finalResult.put(entry.getKey(), score); }  private Double computeScore(String a) { .. } 

 


You could also use the forEach method along with the stream API to yield the result you're seeking.

Map<String, Double> resultSet = new HashMap<>(); inputMap.forEach((k, v) -> resultSet.put(k, v.stream()             .mapToDouble(s -> computeScore(s)).sum())); 

s -> computeScore(s) could be changed to use a method reference i.e. T::computeScore where T is the name of the class containing computeScore.

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: