簡體   English   中英

無法解析Map.Entry條目和lambda表達式

[英]Map.Entry entry and lambda expression cannot be resolved

我不知道我在這里做錯了什么。 在Eclipse Luna甚至CMD上使用lambda表達式“無法解析條目”的ForEach()。

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 class 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()));

並打印你想要的東西。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM