groupBy에서 발생한 횟수를 어떻게 셀 수 있습니까?
스트림 내의 아이템을 동일한 오브젝트를 그룹화하여 발생 횟수로 매핑하는 맵으로 정리하고 싶습니다.
List<String> list = Arrays.asList("Hello", "Hello", "World");
Map<String, Long> wordToFrequency = // what goes here?
이 경우 맵은 다음 엔트리로 구성됩니다.
Hello -> 2
World -> 1
내가 어떻게 그럴 수 있을까?
내 생각에 넌 그저 과부하를 찾고 있는 것 같아Collector
나서 다시 한 번지르르하다.Collectors.counting()
★★★★★★★★★★★★★★★★★★:
import java.util.*;
import java.util.stream.*;
class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("World");
Map<String, Long> counted = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(counted);
}
}
결과:
{Hello=2, World=1}
(할 수도 있어요.groupingByConcurrent
을 사용하다문맥상 안전하다면 실제 코드에 유의해야 할 사항입니다.)
다음은 개체 목록의 예입니다.
Map<String, Long> requirementCountMap = requirements.stream().collect(Collectors.groupingBy(Requirement::getRequirementType, Collectors.counting()));
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("World");
Map<String, List<String>> collect = list.stream()
.collect(Collectors.groupingBy(o -> o));
collect.entrySet()
.forEach(e -> System.out.println(e.getKey() + " - " + e.getValue().size()));
다음은 당면한 작업을 수행하기 위한 약간 다른 옵션입니다.
를 사용합니다.toMap
:
list.stream()
.collect(Collectors.toMap(Function.identity(), e -> 1, Math::addExact));
를 사용합니다.Map::merge
:
Map<String, Integer> accumulator = new HashMap<>();
list.forEach(s -> accumulator.merge(s, 1, Math::addExact));
StreamEx.of(list).groupingBy(Function.identity(), MoreCollectors.countingInt());
코드 "Java"를 수 .collect(Collectors.
수 있는 「」를 할 수 .Collectors2
Eclipse 컬렉션의 클래스:List
a까지Bag
, 「」의Stream
A는 계산을 위해 구축된 데이터 구조입니다.
Bag<String> counted =
list.stream().collect(Collectors2.countBy(each -> each));
Assert.assertEquals(1, counted.occurrencesOf("World"));
Assert.assertEquals(2, counted.occurrencesOf("Hello"));
System.out.println(counted.toStringOfItemToCount());
출력:
{World=1, Hello=2}
'만들기'라고 할 수 .collect
List
a a 에 직접Bag
.
Bag<String> counted =
list.stream().collect(Collectors2.toBag());
하다, 하다, 하다, 이렇게 도 있어요.Bag
를 하지 않고Stream
개작하여List
이클립스 컬렉션 프로토콜을 사용합니다.
Bag<String> counted = Lists.adapt(list).countBy(each -> each);
또는 이 경우에는 다음과 같습니다.
Bag<String> counted = Lists.adapt(list).toBag();
가방을 직접 만들 수도 있습니다.
Bag<String> counted = Bags.mutable.with("Hello", "Hello", "World");
A Bag<String>
a a 같다Map<String, Integer>
만약에...Map
있지 않은됩니다.null
★★★★★★★★★★★★★★★★★★★★★★★.Bag
키에는 사용하지 않습니다.occurrencesOf
. , 0 이 됩니다.
주의: 저는 Eclipse Collections의 커밋입니다.
언급URL : https://stackoverflow.com/questions/25441088/how-can-i-count-occurrences-with-groupby
'source' 카테고리의 다른 글
PHP에 상대 경로 포함 (0) | 2022.11.05 |
---|---|
Python 버전 번호는 어떻게 비교하나요? (0) | 2022.11.05 |
Java에 파일이 있는지 확인하려면 어떻게 해야 하나요? (0) | 2022.10.27 |
바이너리 트리의 밸런스 여부를 확인하는 방법 (0) | 2022.10.27 |
mysql의 SERIAL과 AUTO_INCREMENT의 차이점은 무엇입니까? (0) | 2022.10.27 |