在Scala中反转字频图

时间:2016-11-21 18:16:53

标签: scala flatmap

我有一个像这样的字频数组:

public enum MyEnum {
    AA,
    BB,
    @Deprecated CC,
    DD,
    @Deprecated EE,

    /**
     * Retrieve enum values without the @Deprecated annotation
     */
    public static List<MyEnum> nonDeprecatedValues() {
        return Arrays.stream(MyEnum.values()).filter(value -> {
            try {
                Field field = MyEnum.class.getField(value.name());
                return !field.isAnnotationPresent(Deprecated.class);
            } catch (NoSuchFieldException | SecurityException e) {
                return false;
            }
        }).collect(Collectors.toList());
    }
}

我必须[("hello", 1), ("world", 5), ("globle", 1)] 这样我才能获得频率到wordCount的地图,如下所示:     [(1,2),(5,1)]

请注意,由于两个单词(&#34; hello&#34;和&#34; globe&#34;)的频率为1,因此reverse映射的值为reversed。但是,由于只有一个单词的频率为2,因此该条目的值为5。我怎样才能在scala中执行此操作?

更新

我碰巧也想到了这一点:

1

1 个答案:

答案 0 :(得分:4)

您可以先按计数分组,然后只获得每组的大小

val frequencies = List(("hello", 1), ("world", 5), ("globle", 1))
val reversed = frequencies.groupBy(_._2).mapValues(_.size).toList
res0: List[(Int, Int)] = List((5,1), (1,2))