java - 使用 lambda 表达式的问题
问题描述
我在按字母出现的次数对单词的字母进行排序时遇到问题,如果字母出现相同的次数,则至少会按字典顺序对其进行排序。我有一个代码,但我在网站上得到编译错误和 0 分,因为他们使用 java 7,我不知道如何在没有“lambda”的情况下解决问题的最后一部分。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class prog {
public static void main(String[] args) throws IOException {
String testString = " ";
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
testString = rd.readLine();
Map < Character, List < Character >> map = new HashMap < > ();
for (int i = 0; i < testString.length(); i++) {
char someChar = testString.charAt(i);
if (someChar == ' ') {
continue;
}
char ch = testString.charAt(i);
List < Character > characters =
map.getOrDefault(Character.toLowerCase(ch), new ArrayList < > ());
characters.add(ch);
map.put(Character.toLowerCase(ch), characters);
}
List < Map.Entry < Character, List < Character >>> list =
new ArrayList < > (map.entrySet());
list.sort((o1, o2) - > {
if (o1.getValue().size() == o2.getValue().size()) {
return o1.getKey() - o2.getKey();
}
return o2.getValue().size() - o1.getValue().size();
});
list.forEach(entry - > entry.getValue().forEach(System.out::print));
}
}
解决方案
您可以使用Collections.sort(List<T> list, Comparator<? super T> c)
:
Collections.sort(list, new Comparator<Map.Entry<Character, List<Character>>>() {
@Override
public int compare(Map.Entry<Character, List<Character>> o1, Map.Entry<Character, List<Character>> o2) {
if (o1.getValue().size() == o2.getValue().size()) {
return o1.getKey() - o2.getKey();
}
return o2.getValue().size() - o1.getValue().size();
}
});
for (Map.Entry<Character, List<Character>> characterListEntry : list) {
System.out.println(characterListEntry);
}
Map#getOrDefault(Object key, V defaultValue)
在 Java 8 中也引入了。您需要将其更改为:
char cKey = Character.toLowerCase(ch);
List<Character> characters = map.containsKey(cKey) ? map.get(cKey) : new ArrayList<>();
推荐阅读
- python - 为什么 asyncio 需要一个特殊的信号处理程序?
- asp.net - 用户名或密码不正确
- sql - SQL Server 2012 消息“CREATE VIEW”必须是查询批处理中的第一条语句
- error-handling - SBCL 绕过调试器并打印错误以在其他环境中显示?
- .net-core - .NET Core 2.2 向 ajax 返回异步 SendGrid 响应
- python - 为什么 rstrip() 不删除尾随空格?
- datatables - 如何修复多个页码并在数据表中搜索?当我单击时,它会保持加载额外的页码和搜索(请参阅下面的详细信息))
- pyspark - 当列名为空白时如何使用 pyspark 过滤器
- algorithm - 像彩虹一样对颜色进行排序的算法
- r - 安装软件包时出错“sh: rbbt_Rutil.rb: command not found”