1、使用forEach实现
通过遍历Map
中的每个List<String>
,将每个元素转换为整数并累加到累加器中。
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, List<String>> map = Map.of(
"key1", List.of("1", "2", "3"),
"key2", List.of("4", "5", "6")
);
int sum = 0;
for (List<String> list : map.values()) {
for (String str : list) {
sum += Integer.parseInt(str);
}
}
System.out.println("Sum: " + sum); // 输出: Sum: 21
}
}
2、使用collect()实现
使用 stream()
和 Collectors.toMap()
来计算每个产品和订单的分数总和。
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 输入示例
Map<String, List<String>> inputMap = new HashMap<>();
inputMap.put("product", Arrays.asList("132377",
"2123232", "312335678", "423432", "5215566"));
inputMap.put("order", Arrays.asList("3174252",
"1468453", "1264543", "35723112", "235775645"));
// 计算每个列表的总分数
Map<String, Double> finalResult = inputMap.entrySet()
.stream()
.collect(Collectors.toMap(
Entry::getKey,
e -> e.getValue()
.stream()
.mapToDouble(Main::computeScore)
.sum()
));
// 输出结果
System.out.println("Final Result: " + finalResult);
}
// 示例计算分数的方法
private static double computeScore(String str) {
// 在这里根据你的逻辑计算分数
// 示例:将字符串转换为数字并取其平方根作为分数
return Math.sqrt(Double.parseDouble(str));
}
}
或
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 示例输入数据
Map<String, List<String>> inputMap = new HashMap<>();
inputMap.put("product", Arrays.asList("132377",
"2123232", "312335678", "423432", "5215566"));
inputMap.put("order", Arrays.asList("3174252",
"1468453", "1264543", "35723112", "235775645"));
// 使用流操作进行分数计算和收集
Map<String, Double> finalResult = inputMap.entrySet()
.stream()
.map(entry -> new AbstractMap.SimpleEntry<>(
entry.getKey(),
entry.getValue().stream()
.mapToDouble(Main::computeScore)
.sum()
))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
// 输出结果
System.out.println("Final Result: " + finalResult);
}
// 示例分数计算方法
private static double computeScore(String str) {
// 假设:将字符串转换为数字并取平方根作为分数
return Math.sqrt(Double.parseDouble(str));
}
}
3、使用mapToInt和sum
通过将List<String>
中的每个元素转换为整数,然后使用mapToInt
和sum
方法来求和。
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, List<String>> map = Map.of(
"key1", List.of("1", "2", "3"),
"key2", List.of("4", "5", "6")
);
int sum = map.values().stream()
.flatMap(List::stream)
.mapToInt(Integer::parseInt)
.sum();
System.out.println("Sum: " + sum); // 输出: Sum: 21
}
}
4、使用reduce
通过将List<String>
中的每个元素转换为整数,然后使用reduce
方法来求和。
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, List<String>> map = Map.of(
"key1", List.of("1", "2", "3"),
"key2", List.of("4", "5", "6")
);
int sum = map.values().stream()
.flatMap(List::stream)
.map(Integer::parseInt)
.reduce(0, Integer::sum);
System.out.println("Sum: " + sum); // 输出: Sum: 21
}
}