输入:
RTYUUJKIOO
实际输出:
--R--1
--T--1
--U--2
--Y--1
--I--1
--J--1
--K--1
--O--2
预期输出:
--R--1
--T--1
--Y--1
--U--2
--J--1
--K--1
--I--1
--O--2
不确定为什么在打印期间无法维护订单。
逻辑如下:
static String isValid(String s)
{
boolean validString;
Map<String, Integer> characterFrequencyMap = new HashMap<String, Integer>();
String[] singleLetterStringArray = s.split("");
List<String> singleLetterStringList = Arrays.asList(singleLetterStringArray);
singleLetterStringList.stream().forEachOrdered(l -> {
Integer frequency;
if(characterFrequencyMap.containsKey(l)) {
frequency = characterFrequencyMap.get(l);
characterFrequencyMap.put(l, frequency + 1);
} else {
characterFrequencyMap.put(l, 1);
}
});
Set<String> keys = characterFrequencyMap.keySet();
Iterator<String> keyItr = keys.iterator();
while(keyItr.hasNext()) {
String key = keyItr.next();
System.out.print("--" + key + "--");
System.out.println(characterFrequencyMap.get(key));
}
return s;
}
最佳答案
HashMap
不维护插入顺序。如果要维护插入顺序,请使用 LinkedHashMap
:
Map<String, Integer> characterFrequencyMap = new LinkedHashMap<String, Integer>();
顺便说一句,使用 Stream
生成此 Map
的更好方法是使用 collect()
:
Map<String,Long> characterFrequencyMap =
singleLetterStringList.stream()
.collect(Collectors.groupingBy (Function.identity (),
LinkedHashMap::new,
Collectors.counting()));
关于java - 为什么list上stream操作时生成的map顺序不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50550619/