Java 使用lambda表达式的问题

Java 使用lambda表达式的问题,java,algorithm,lambda,bufferedreader,bufferedwriter,Java,Algorithm,Lambda,Bufferedreader,Bufferedwriter,我对一个单词的字母排序有一个问题,就是根据字母出现的次数来排序,如果字母出现的次数相同,它至少会按字典顺序排序。 我有一个代码,但我在网站上得到编译错误和0分,因为他们使用java 7,我不知道如果没有“lambda”,如何解决问题的最后一部分 导入java.io.BufferedReader; 导入java.io.IOException; 导入java.io.InputStreamReader; 导入java.util.*; 公共类程序{ 公共静态void main(字符串[]args)引发I

我对一个单词的字母排序有一个问题,就是根据字母出现的次数来排序,如果字母出现的次数相同,它至少会按字典顺序排序。 我有一个代码,但我在网站上得到编译错误和0分,因为他们使用java 7,我不知道如果没有“lambda”,如何解决问题的最后一部分

导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.*;
公共类程序{
公共静态void main(字符串[]args)引发IOException{
字符串testString=“”;
BufferedReader rd=新的BufferedReader(新的InputStreamReader(System.in));
testString=rd.readLine();
Map>Map=newhashmap<>();
对于(int i=0;i字符=
map.getOrDefault(Character.toLowerCase(ch),新的ArrayList<>());
字符。添加(ch);
map.put(Character.toLowerCase(ch),characters);
}
列表>>列表=
新的ArrayList<>(map.entrySet());
列表.排序((o1,o2)->{
如果(o1.getValue().size()==o2.getValue().size()){
返回o1.getKey()-o2.getKey();
}
返回o2.getValue().size()-o1.getValue().size();
});
list.forEach(entry->entry.getValue().forEach(System.out::print));
}
}

您可以使用
Collections.sort(List List,Comparator来使用Java 7构建
映射,您可以按如下操作

        // convert to lower case from the start
        testString = rd.readLine().toLowerCase();

        Map<Character, List<Character>> map = new HashMap<>();
        for (int i = 0; i < testString.length(); i++) {
            char someChar = testString.charAt(i);
            if (someChar == ' ') {
                continue;
            }
            // try and get the list
            List<Character> characters = map.get(someChar);
            if (characters == null) {
                // otherwise, create it
                characters = new ArrayList<>();
                // and put it in the map
                map.put(someChar, characters);
            }
            // add characters to the obtained list.
            characters.add(someChar);
        }
然后用类的实例调用sort

Collections.sort(list,new CountThenLex());
您还必须修改打印方法以及其他方法,因为还存在其他Java8特性

    for(Entry<?,List<Character>> e : list) {
        for (char c : e.getValue()) {
            System.out.print(c);
        }
    }
    System.out.println();

for(EntryWhat site?您不能选择要使用的java版本吗?无论如何,您必须实现自己的
比较器
,使用
Collections.sort()
并将
forEach
重写为一个简单的循环。还可以使用
map.getOrDefault
更改部分。Java 8现在已经过时了。你应该向网站报告。他们不支持它和将来的、稳定的版本,这对用户是一种伤害。@STRKLok你可能需要重新考虑在中返回减去的值e> comparator
实现。它并不总是有效的,并且可能会导致陷阱。最好根据需要返回显式值1、-1或0。@OleV.V.没问题,实际上我喜欢按您的方式执行,并在可能的情况下连接comparator。正如我在对问题的评论中所说的,
map.getOrDefault
也需要更改l、 我认为在你的回答中也值得一提。@WJS这个问题是关于Java 8和7兼容性的。@M.S.这个网站是关于帮助的。有时候,帮助超出了手头的问题。但是我把这个建议转发给OP,因为这是他们的代码。