텍스트의 모든 문자 빈도를 계산하여 인쇄하려고합니다. Array
또는 ArrayList
을 사용하고 키 - 값 쌍이있는지도가 필요하지 않습니다.스트림, 맵, 키 - 값 쌍을 사용하지 않고 텍스트의 문자 빈도 계산 및 인쇄
아래 코드는 바람직한 결과를 제공합니다. for
루프를 제거하고 싶습니다. main
countLetters()
의 모든 작업을 수행하십시오.
분명히하기 위해, for 루프 나 if 문을 사용하지 않는 기능적인 방법으로이 작업을 수행하고자합니다. 이 작업을 수행 할 수 있습니까? 그렇다면 어떻게?
public class LetterCounter4 {
public static void main(String[] a) {
System.out.print("Input text > ");
int[] res = countLetters();
for (int i = 0; i < res.length; i++) {
if(res[i] != 0){
System.out.println((char) ('a' + i) + " appears "
+ res[i] + ((res[i] == 1 ? " time" : " times")));
}
}
}
private static int[] countLetters() {
return Arrays.stream(new Scanner(System.in).nextLine().toLowerCase()
.split(""))
.map(s -> s.charAt(0))
.filter(Character::isLetter)
.collect(Collector.of(
() -> new ArrayList<Integer>(Collections.nCopies(26, 0)),
(li, el) -> {
Integer oInt = li.get(el - 'a');
li.set(el - 'a', ++oInt);
},
(result1, result2) -> {
for (int i = 0; i < result1.size(); i++) {
Integer temp = result1.get(i);
result1.set(i, temp + result2.get(i));
}
return result1;
}))
.stream()
.mapToInt(Integer::intValue)
.toArray();
}
}
단지 아니,리스트의 값을 인쇄 할 것이다 :
특별히 배열과 목록을 고수하고자하는 경우, 여기에 그것을 할 수있는 방법이있다? 그러나 모든 값을 해당 문자에 연결할 수는 없습니다. 나는 각 단계에서 인쇄하고있는 목록의 색인을 알 수 있습니다. – xtra