java - Map.Entry 条目和 lambda 表达式无法解析

标签 java

我不知道我在这里做错了什么。 ForEach() 在 Eclipse Luna 甚至 CMD 上带有 lambda 表达式“无法解析条目”。

Map<Character, Integer> map = new HashMap<>();
        while(sc.hasNextLine()) {          
            String str = sc.nextLine().replaceAll("\\s+", "").replaceAll("\\r\\n+", "");
            char[] arr = str.toCharArray();  
            len += arr.length;                

           for(int i = 0; i < len; i++){
                char ch = str.charAt(i);
                if(map.containsKey(ch))          
                   map.put(ch, map.get(ch) + 1); 
                else
                    map.put(ch, 1);                 
           }

            map.entrySet().stream()
            .sorted(Map.Entry. <Character, Integer> comparingByValue().reversed())
            .limit(5)
            .forEach(entry -> System.out.printf("'%c' : %d%n", entry.getKey(), entry.getValue()));

最佳答案

它对我进行查找,直到字符串中的 5 个字符没有空格超过 5 个字符,它会抛出以下异常

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6 at java.lang.String.charAt(String.java:658) at com.rmi.service.imp.MyServcieImp.main(MyServcieImp.java:29)

这是你的代码

`公共(public)类 MyServcieImp {

public static void main(String[] args) {


    Scanner sc= new Scanner(System.in);
    int len=0;
    Map<Character, Integer> map = new HashMap<>();
    while(sc.hasNextLine()) {          
        String str = sc.nextLine().replaceAll("\\s+", "").replaceAll("\\r\\n+", "");
        char[] arr = str.toCharArray();  
        len += arr.length;                

       for(int i = 0; i < len; i++){
            char ch = str.charAt(i);
            if(map.containsKey(ch))          
               map.put(ch, map.get(ch) + 1); 
            else
                map.put(ch, 1);                 
       }

        map.entrySet().stream()
        .sorted(Map.Entry. <Character, Integer> comparingByValue().reversed())
        .limit(5)
        .forEach(entry -> System.out.printf("'%c' : %d%n", entry.getKey(), entry.getValue()));
    }
}

} `

你想要什么?打印超过 5 个还是什么?

如果你想打印所有字符串长度,只需替换

char ch = str.charAt(i);

map.entrySet().stream() .sorted(Map.Entry. <Character, Integer> comparingByValue().reversed()) .limit(5) .forEach(entry -> System.out.printf("'%c' : %d%n", entry.getKey(), entry.getValue()));

char ch = arr[i];

map.entrySet().stream() .sorted(Map.Entry. <Character, Integer> comparingByValue().reversed()) .limit(map.size()) .forEach(entry -> System.out.printf("'%c' : %d%n", entry.getKey(), entry.getValue()));

并打印你想要的内容。 :)

关于java - Map.Entry 条目和 lambda 表达式无法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55944568/

相关文章:

java - 使用 Jackson 将 json 扁平化为 map

java - 如何使 JPanel 保持在另一个已设置大小的 JPanel 之上

java - java中的ip地址是否有效

java - Spring 和 Java 中的 Websocket

java - 通过 tcp/ip 的 jdbc 比在本地机器上慢得多

java - ADT - 如何以图形方式编辑大于屏幕尺寸的 ScrollView ?

java - 无法通过 Crashlytics 启动 Activity ComponentInfo{..} : java. lang.NullPointerException。无法重现

java - 调用 'substring' 是多余的

java - 使用GCM可以吗?

java - 有没有类似 Java 的 VirtualEnv 之类的东西?