考虑元素列表:
{productDTO1, productDTO1, productDTO2, productDTO2, productDTO2, productDTO3}
我需要计算频率,区分并返回Map<ProductDTO, Long>
collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
不起作用。尽管它返回了所需的地图,但它不计数也不返回重复项。
我的预期结果是映射,其中Key是对象,值是集合中的频率。
即:
productDTO1=2
productDTO2=3
productDTO3=1
@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public abstract class AbstractDTO {
@EqualsAndHashCode.Include
Long id;
Boolean enabled;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ProductDTO extends AbstractDTO {
private String name;
private String description;
private BigDecimal price;
}
答案 0 :(得分:2)
到目前为止,这是您所填写的详细信息。它似乎正在起作用。您特别期待什么?
List<String> list = List.of("myItem1",
"myItem1",
"myItem2",
"myItem2",
"myItem2",
"myItem3");
Map<String, Long> freq = list.stream().collect(
Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(freq);
显示。
{myItem3=1, myItem1=2, myItem2=3}
由于我不知道您的对象类型,因此我使用了字符串。