如何把存储在treeMap中的字符串放在java
How to put the string stored in the treeMap in java
我有一个字符串 a = "1x^2 2x^3 3x^4 4x^4 ",我想将每个项中的幂作为键和系数作为值存储到 treeMap。由于有两个不同系数的相同幂,我需要对系数求和,以便结果为{2=1,3=2,4=7}。因为 treemap.put(key) 只能用相同的 key 覆盖之前的值,所以我只能得到 {2=1,3=2,4=4} 的结果。如何解决?
建议使用Map::merge
函数来累加多个相同键的值:
Map<Integer, Integer> terms = new TreeMap<>();
for (String term : a.split("\s+")) {
String[] pair = term.split("x\^");
terms.merge(Integer.valueOf(pair[1]), Integer.valueOf(pair[0]), Integer::sum);
}
System.out.println(terms);
输出:
{2=1, 3=2, 4=7}
使用 Stream API 这可以使用 Collectors.toMap
以类似的方式使用 Integer::sum
作为合并函数来解决:
String a = "1x^2 2x^3 3x^4 4x^4 ";
Map<Integer, Integer> terms = Arrays.stream(a.split("\s+")) // Stream<String>
.map(t -> t.split("x\^")) // Stream<String[]>
.collect(Collectors.toMap(
t -> Integer.valueOf(t[1]), // power as key
t -> Integer.valueOf(t[0]), // coefficient as value
Integer::sum, // add coefficients for the same power
TreeMap::new // supply TreeMap as result
));
System.out.println(terms);
输出:
{2=1, 3=2, 4=7}
我有一个字符串 a = "1x^2 2x^3 3x^4 4x^4 ",我想将每个项中的幂作为键和系数作为值存储到 treeMap。由于有两个不同系数的相同幂,我需要对系数求和,以便结果为{2=1,3=2,4=7}。因为 treemap.put(key) 只能用相同的 key 覆盖之前的值,所以我只能得到 {2=1,3=2,4=4} 的结果。如何解决?
建议使用Map::merge
函数来累加多个相同键的值:
Map<Integer, Integer> terms = new TreeMap<>();
for (String term : a.split("\s+")) {
String[] pair = term.split("x\^");
terms.merge(Integer.valueOf(pair[1]), Integer.valueOf(pair[0]), Integer::sum);
}
System.out.println(terms);
输出:
{2=1, 3=2, 4=7}
使用 Stream API 这可以使用 Collectors.toMap
以类似的方式使用 Integer::sum
作为合并函数来解决:
String a = "1x^2 2x^3 3x^4 4x^4 ";
Map<Integer, Integer> terms = Arrays.stream(a.split("\s+")) // Stream<String>
.map(t -> t.split("x\^")) // Stream<String[]>
.collect(Collectors.toMap(
t -> Integer.valueOf(t[1]), // power as key
t -> Integer.valueOf(t[0]), // coefficient as value
Integer::sum, // add coefficients for the same power
TreeMap::new // supply TreeMap as result
));
System.out.println(terms);
输出:
{2=1, 3=2, 4=7}