2016-11-12 10 views
2

입니다에 :keySet()을 사용하여 HashMap 내의 키 세트를 가져 와서 반복하고 각 키의 수를 찾으려면 어떻게해야합니까? 나는 내 임무의 끝과 내가 t 지시 한 마지막 일 중 하나에 근접하고

  • 사용 keySet 반환() 키 세트 (매핑의 문자열 부분)을 검색 할 수 . 이 집합을 반복하고 단어와 그 수를 인쇄하십시오.

내 HashMap에서 키 수를 인쇄하는 데 keySet() 메서드를 사용했지만 아직 수행하지 않은 것은 HashMap 내의 각 단어의 길이를 찾고 문자 수를 출력하는 것입니다. 각 단어 안에. 나는 현재 어떻게해야하는지 확신 할 수 없다. 나는 for 루프를 사용하여 이미 수행 한 keySet()을 반복하고, .length() 메서드와 같은 것을 사용하여 각 단어의 길이를 알아 낸 다음 어떻게 든 프린트 아웃한다고 가정하고있다.

가 여기에 지금까지 내 관련 코드입니다 :

Main 클래스

package QuestionEditor; 
import java.util.Set; 
public class Main{ 
    public static void main (String[] args) { 
     WordGroup secondWordGroup = new WordGroup ("When-you-play-play-hard-when-you-work-dont-play-at-all"); 


     Set<String> set = secondWordGroup.getWordCountsMap().keySet(); 

     System.out.println("set : " + set + "\n"); 

     for(String key : set) 
     { 
      System.out.println(key); 
     } 
     } 
    } 

WodGroup 클래스

package QuestionEditor; 
import java.util.HashMap; 

public class WordGroup { 

    String word; 

    // Creates constructor which stores a string value in variable "word" and converts this into lower case using 
    // the lower case method. 
    public WordGroup(String aString) { 

     this.word = aString.toLowerCase(); 
    } 

    public String[] getWordArray() { 

     String[] wordArray = word.split("-"); 
     return wordArray; 
    } 

    public HashMap<String, Integer> getWordCountsMap() { 

     HashMap<String, Integer> myHashMap = new HashMap<String, Integer>(); 

     for (String word : this.getWordArray()) { 
      if (myHashMap.keySet().contains(word)) { 
       myHashMap.put(word, myHashMap.get(word) + 1); 
      } else { 
       myHashMap.put(word, 1); 
      } 

     } 

     return myHashMap; 
    } 
} 

이 작업을 수행하는 방법에 어떤 도움을 크게 감상 할 수있다, 감사.

Key: play has 3 counter 
Key: all has 1 counter 
Key: at has 1 counter 
Key: work has 1 counter 
Key: hard has 1 counter 
Key: when has 2 counter 
Key: you has 2 counter 
Key: dont has 1 counter 

하지만 제가 실제로이 원하는 각 단어에서 문자의 양을 인쇄하는 것입니다 내 코드를 컴파일 할 때

UPDATE 그래서, 내가 출력을 얻고있다. 그래서 예를 들어, 놀이는 4 번 계산할 것이고, 3 번 계산하면 2 번 계산할 것입니다. 구현 방법에 대한 아이디어가 있습니까?

답변

2

당신은 함수가 축적이다 수집하는 Map<String,Integer>

Map<String, Integer> stringIntegerMap = set.stream().collect(HashMap::new, 
    (hashMap, s) -> hashMap.put(s, s.length()), HashMap::putAll); 

stringIntegerMap.forEach((key,value) ->System.out.println(key + " has length: "+key.length() + " and count: "+value)); 

두 번째 매개 변수를 만들 자바 8에서 스트림 API를 사용할 수 있습니다. keyset에서 문자열의 hasmap을 누적하고 길이가

+0

감사합니다. – Alan

2

당신은 아마 누락 된 부분은 : 당신은 다음과 같이지도의 값에 액세스 할 수 키를 사용할 수 있습니다 :

Map<String, Integer> whateverMap = ... coming from somewhere 

for (String key : whateverMap.keySet()) { 
    Integer countFromMap = whateverMap.get(key); 
    System.out.println("Key: " + key + " has " + countFromMap + " counter"); 

위의 예는 당신이 가야로, I didn를 의미 그것을 컴파일러를 통해 실행하지 마십시오.

여기 내 요점 :지도 내에 저장된 요소를 반복하는 다양한 방법이 있습니다. entrySet()을 검색하여 을 검색 할 수 있습니다. 항목; 또는 키를 반복하고 각 키를 사용하여 값을 검색합니다.

+0

답장을 보내 주셔서 감사합니다. 내 게시물에서 편집하고 질문하는 출력을 얻고 있습니다. – Alan