使用lambda表达式遇到问题的解决思路
来源:爱站网时间:2022-06-20编辑:网友分享
在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> map = new HashMap();
for (int i = 0; i characters =
map.getOrDefault(Character.toLowerCase(ch), new ArrayList());
characters.add(ch);
map.put(Character.toLowerCase(ch), characters);
}
List>> 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
:
Collections.sort(list, new Comparator>>() {
@Override
public int compare(Map.Entry> o1, Map.Entry> o2) {
if (o1.getValue().size() == o2.getValue().size()) {
return o1.getKey() - o2.getKey();
}
return o2.getValue().size() - o1.getValue().size();
}
});
for (Map.Entry> characterListEntry : list) {
System.out.println(characterListEntry);
}
Map#getOrDefault(Object key, V defaultValue)
也是Java 8中引入的。您需要将其更改为类似的内容:
char cKey = Character.toLowerCase(ch);
List characters = map.containsKey(cKey) ? map.get(cKey) : new ArrayList();
思路二:
对于这样的事情,我更喜欢写local classes
来处理。另外,它们比匿名类还干净,但确实需要其他语法。如果您不熟悉这些内容,它将放在您的主类中。
static class CountThenLex implements Comparator >> {
public int compare(
Entry > a,
Entry > b) {
int asize = a.getValue().size();
int bsize = b.getValue().size();
// note that b is sorted first for descending count order.
int aTob = bsize > asize ? 1 :
bsize
然后,您仅使用类的实例调用sort。
Collections.sort(list, new CountThenLex());
由于还存在其他Java 8功能,因此您还必须修改打印方法以及其他方法。这是基本的打印解决方案。
for(Entry,List> e : list) {
for (char c : e.getValue()) {
System.out.print(c);
}
}
System.out.println();
使用lambda表达式遇到问题的解决思路不知道小伙伴们都看清楚了没有,关注爱站技术频道网站,每天带你了解更多不一样的技术文章知识点。