您好,
我有不合逻辑的字符串列表,例如:
Scanner s = new Scanner(
"m29 523\n" +
"b34 827\n" +
"p42 235\n" +
"b34 294\n" +
"t78 421\n" +
"t78 673\n" +
"c93 173\n" +
"k46 925\n" +
"k46 322\n" +
"x21 644\n");
然后我想在两个部分中断字符串 - 在空格之前和之后,消除重复并且在重复之间仅留下最大值(在空格之后)(b34,t78,k46)。我是指这样的输出:
"m29 523"
"b34 827"
"p42 235"
"t78 673"
"c93 173"
"k46 925"
"x21 644"
至于分成两部分并消除重复,我使用了这样的代码,对我来说没关系:
Map<String, ArrayList<String>> list = new HashMap<String, ArrayList<String>>();
while (s.hasNext()){
String key = s.next();
if(!list.containsKey(key));
list.put(key, new ArrayList<String>());
list.get(key).add(s.next());
}
System.out.println(list);
但是不明白我在这里如何实现字符串第二部分的比较以获得最大值?的Integer.parseInt(list.get(密钥))?
答案 0 :(得分:2)
如何进行简单比较:如果密钥存在,则使用密钥获取值。使用Math.MAX将值与新值进行比较,然后使用键重新插入。该值将被最大值覆盖。
Map<String, Integer> list = new HashMap<String, Integer>();
String key="FOO";
String s[]={"123","012","789"};
for(String numStr: s)
{
int value = Integer.parseInt(numStr);
if(!list.containsKey(key))
list.put(key, value);
else
list.put(key, Math.max(value, list.get(key)));
}
System.out.println( list.get(key) );
结果是789
答案 1 :(得分:1)
我认为你不需要使用ArrayList复杂化 请使用Hashmap 这是实现简单的代码。
Map<String, Integer> map = new HashMap<String, Integer>();
while(s.hasNext()) {
String key = s.next();
int value = Integer.parseInt(s.next());
if(map.containsKey(key)) {
if(value>map.get(key))
map.put(key, value);
}else map.put(key, value);
}
System.out.println("Map="+map);
}