计算不同对象的频率并返回地图

时间:2019-06-23 00:54:04

标签: java stream java-stream lombok

考虑元素列表:

{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;
}

1 个答案:

答案 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}

由于我不知道您的对象类型,因此我使用了字符串。