以下是我实施的代码。我的疑问是:当我尝试打印字符串中的第一个和第二个Biggest值时,我得到的输出大约为<Orders>
<Order>
<Item name="123" />
</Order>
</Orders>
。
以下是我为以下代码获得的输出:
[second biggest, first biggest]
但是,我想要The output of the map is: real--6
The output of the map is: to--2
The output of the map is: world--1
The output of the map is: hello--0
The list after insertion is: [to, real]
The list inserted as [biggest,secondBiggest] after calling main is: [to, real]
......
。
The list after insertion to be: [real, to]
答案 0 :(得分:0)
问题似乎是在向列表中添加项目时。当您迭代map.keySet()时,无法保证您将首先获得最大的项目。我要做的最小的改变是在列表中首先添加最大的项目。
for (String s1 : map.keySet()) {
if (map.get(s1).equals(biggest))
list.add(0, s1);
else if (map.get(s1).equals(secondBiggest))
list.add(s1);
}
这样,如果首先添加secondBiggest,则最大值将位于列表的顶部。
答案 1 :(得分:0)
如果我们将word
和count
提取到一个简单的POJO中,我们可以简化您的方法。像,
static class WordCount implements Comparable<WordCount> {
String word;
int count;
WordCount(String word, int count) {
this.word = word;
this.count = count;
}
@Override
public int compareTo(WordCount o) {
return Integer.compare(count, o.count);
}
}
然后我们可以在repeatedString
中使用它。首先,计算String
中的单词;然后构建一个List
WordCount
(s)。对它进行排序(因为它是Comparable
它具有自然顺序)。然后构建List
以通过反向迭代List
的{{1}}(对于两个项目)来返回。像,
WordCount
最后,您的static List<String> repeatedString(String s) {
Map<String, Integer> map = new HashMap<>();
for (String word : s.split("\\s+")) {
map.put(word, !map.containsKey(word) ? 1 : 1 + map.get(word));
}
List<WordCount> al = new ArrayList<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
al.add(new WordCount(entry.getKey(), entry.getValue()));
}
Collections.sort(al);
List<String> ret = new ArrayList<>();
for (int i = al.size() - 1; i >= al.size() - 2; i--) {
ret.add(al.get(i).word);
}
return ret;
}
方法应该使用main
(或static input
应删除)
static input
我得到(根据要求)
static String input = "This is a real project with real code to do "
+ "real things to solve real problems in real world real";
public static void main(String[] args) {
List<String> lst = repeatedString(input);
System.out.println("The list inserted as [biggest,"
+ "secondBiggest] after calling main is: " + lst);
}
答案 2 :(得分:0)
如果你只关心最大和最大的,
你可以参考下面的代码
我没有直接创建列表,而是创建了一个数组,在指定的位置添加了必需的元素。 (这样它变得更具可读性)
最后将数组转换为列表。
%