我正在努力使用 Java 解决这个问题
这是所需的输入和输出:
Input
1,9
1,12
1,7
3,3
2,4
3,2
2,2
output
1 -> 7,9,12
2 -> 2,4
3 -> 2,3
我可以使用Comparable
and来实现和打印这样的输出compareTo
1,7,
1,9,
1,12,
2,2,
2,4,
3,2,
3,3
但这不是我想要的答案。有人可以帮助我或给我任何建议吗?这是我实现的代码,但这不是我想要的。
使用地图:
Map<Integer, List<Integer>> groups = new TreeMap<Integer, List<Integer>>();
对于每个输入行,将其拆分为逗号并分隔数字:
String[] parts = inputLine.split(',');
int group = Integer.parseInt(parts[0]);
int member = Integer.parseInt(parts[1]);
其中“组”是逗号之前的数字,“成员”是逗号之后的数字。查找组的 Map 条目,如果不存在则创建:
List<Integer> list = groups.get(group);
if (list==null) {
list = new ArrayList<Integer>();
groups.put(group, list);
}
将“成员”号添加到组中:
group.add(member);
输出留作练习:)
假设你的字符串是String[]
这样的:
public static void main(String[] args) {
final Scanner sc = new Scanner(System.in);
final List<String> list = new ArrayList<String>();
while (sc.hasNext()) {
final String next = sc.next();
if ("print".equals(next)) {
break;
}
list.add(next);
}
printGrouped(list);
}
public static void printGrouped(Collection<String> args) {
final TreeMap<Integer, Set<Integer>> map = new TreeMap<Integer, Set<Integer>>() {
@Override
public Set<Integer> get(Object key) {
Set<Integer> list = super.get(key);
if (list == null) {
list = new TreeSet<Integer>();
put((Integer) key, list);
}
return list;
}
};
for (final String string : args) {
final String[] split = string.split(",");
final Set<Integer> list = map.get(Integer.parseInt(split[0]));
list.add(Integer.parseInt(split[1]));
}
for (final Entry<Integer, Set<Integer>> entry : map.entrySet()) {
final String valueString = entry.getValue().toString();
System.out.println(entry.getKey() + " -> " + valueString.substring(1, valueString.length() - 1));
}
}
输入:
1,9
1,12
1,7
3,3
2,4
3,2
2,2
print
输出:
1 -> 7, 9, 12
2 -> 2, 4
3 -> 2, 3
你可以使用这样的东西:
Map<Integer, Set<Integer>> result = new TreeMap<Integer, Set<Integer>>();
public void parseInput(int key, int value) {
if(result.get(key) == null) { // if you have not encountered the first integer yet, add it to your map.
result.put(key, new TreeSet<Integer>() {{ add(value); }});
} else { // otherwise, just add your value to your existing set. The set will take care of duplicates.
result.get(key).add(value);
}
}