当前位置: 首页 > 知识库问答 >
问题:

如何筛选treemap

裴宏壮
2023-03-14

FundingRank和SourceBucket是枚举,但本质上是int

enum FundingRank {
    LESS_THAN_0(0),
    LESS_THAN_1(1),
    LESS_THAN_100(100);

    private final int rank;
    FundingRank(int i) {
        this.rank = i;
    }
}

enum ScoreBucket {
    MORE_THAN_1000(1000),
    MORE_THAN_500(1000),
    MORE_THAN_100(100),
    MORE_THAN_10(10);

    private final int bucket;
    ScoreBucket(int i) {
        this.bucket = i;
    }
}
fundingRank  scoreBucket List<Kids>
0              1000       List(with 1 elements) 
                500       List(with 2 elements)
                100       List(with 4 elements)
                 10       List(with 3 elements)
1             1000        List(with 4 elements)
                500       List(with 7 elements)
                100       List(with 4 elements)
                 10       List(with 3 elements)
 myMap.entrySet().stream()
     .filter(e -> e.getvalue().entryset().stream()
         .filter(e2 ->e2.getvalue().size()).findfirst();


Output sorted map like this:

1 500  List(with 7 elements)
0 100  List(with 4 elements)
1 1000 List(with 4 elements)
1 100  List(with 4 elements)
0 10   List(with 3 elements)
...

因此,我试图对treemap >进行排序,排序顺序定义为MinFunding rank和max scorrebucket(阈值为5,如果bucket有5个孩子,这意味着如果有其他更小的bucket有更多的孩子,得分更高的bucket获胜,或者如果有更大的fundinggrank有更高的bucket大小和更多的孩子,仍然是更低的fundingBucket行获胜,如果它满足5个孩子的阈值),然后拿起第一行希望现在已经清楚了

共有1个答案

公良鸿风
2023-03-14

如果要查找[fundingRank,scoreBucket,list_Kids]三元组,其最小fundingRank和最大scorebuck,但只考虑包含5个以上子组的三元组,则可以将外部和内部映射的条目流式传输,并使用自定义的比较器来查找:

Optional<Map.Entry<FundingRank, Map.Entry<ScoreBucket, Integer>>> triplet = 
    outerMap.entrySet().stream()
        .flatMap(outerEntry -> outerEntry.getValue().entrySet().stream()
            .map(innerEntry -> Map.entry(
                 outerEntry.getKey(), 
                 Map.entry(innerEntry.getKey(), innerEntry.getValue().size()))))
        .min(Comparator.comparingInt(t -> t.getValue().getValue() >= 5 ? 0 : 1)
            .thenComparing(t -> t.getKey())
            .thenComparing(t -> t.getValue().getKey(), Comparator.reverseOrder())
            .thenComparing(t -> t.getValue().getValue(), Comparator.reverseOrder()));

triplet.ifPresent(it -> /* do something with the triplet */);

这将创建作为map.entry > 的三元组,并根据给定的comparator查找最小三元组,(我希望)它满足您的要求。

我们在stream.min中使用比较器,该比较器首先根据01进行排序,后者是一个标志,指定是否有5个以上的子级。如果有5个以上的孩子,则此标志为0,因此首先显示有5个以上孩子的三胞胎。然后,比较器按fundingrank升序进行排序,然后按scorebucket降序进行排序,最后,如果有平局,则按降序的实际子数进行排序(以防万一)。

这里,我使用Java9+的map.entry(...)方法创建条目。如果您使用的是Java8,应该使用new AbstractMap.SimpleEntry(...)创建条目。

 类似资料:
  • 我正在尝试从支持库中实现。我希望用户使用在中筛选电影的。 到目前为止,我已经学习了一些教程,并且已经将添加到中,但我不确定从这里要往哪走。我已经看到了一些例子,但没有一个显示结果,当您开始键入。 这是我的: 这是我的:

  • 问题内容: 在纯postgres中,我们可以编写: 或者 没有原始sql的情况下如何在sqlalchemy的帮助下进行相同的操作? 问题答案: 等于1。 因此,您可以使用该方法。 我不记得曾经使用PostgreSQL多年。你? 如果您要处理 数组列, 并想测试该 列中 是否包含给定元素(或给定数组的所有元素),则可以利用PostgreSQL数组运算符 ()或更合适地利用反同级 ()。 数组运算符的

  • 如何在枚举的帮助下筛选我的“StorageManager”在其名为“items”的LinkedList中的项目?受此筛选器影响的项目需要复制到新的LinkedList中。我用buyNewItem()将项目添加到存储管理器列表中,但第二项任务需要帮助。 如果我忘记添加一些重要信息,请让我知道。 编辑:仅允许重新导入的是 导入java.util.数组; 导入java.util.LinkedList;

  • 本文向大家介绍jQuery多条件筛选如何实现,包括了jQuery多条件筛选如何实现的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jquery实现多条件筛选特效。分享给大家供大家参考。具体如下: 我们在电商平台购买商品时,在商品列表页根据品牌、款式、价格范围等条件进行筛选查询,当点击某个条件时,在页面上会显示用户所选择的条件集合,并且将对应的符合条件的商品信息展示出来。那么今天我们使用jQ

  • 若要用单个列过滤数据文件(DF),如果我们考虑有男性和女性的数据,我们可以: 问题1——但如果数据跨越多年,而我只想看到2014年的男性会怎样? 在其他语言中,我可能会这样做: (除非我想这样做并在新的dataframe对象中获取原始dataframe的子集) 问题2。我如何在一个循环中实现这一点,并为每个独特的年份和性别集(即:2013年男性、2013年女性、2014年男性和2014年女性)创建

  • 本文向大家介绍sqlalchemy 筛选,包括了sqlalchemy 筛选的使用技巧和注意事项,需要的朋友参考一下 示例 给定以下模型 您可以过滤查询中的列: 对于第一种情况,有一个快捷方式: 可以使用AND关系通过链接filter方法来构成过滤器: 或更灵活地使用重载按位运算符&和|: 不要忘记内括号来处理运算符优先级。