如何组合列表元素并找到最大组合的价格

2024-01-05

我有一个类,其中包含特定项目的详细信息,如下所示:

Detail.class

Long detailsId;
Integer price;
List<Long> stackableDetails;

/*getters and setters*/

现在,我有一个如下所示的示例数据集:

    DetailId    Price    StackableDetails
------------------------------------------
    1011        4$       1012, 1014
    1012        6$       1011,1013
    1013        10$      1012
    1014        8$       1011

该数据集映射到 List SampleDetails。 现在,根据 stackableDetails 信息,我必须组合详细信息并从中选择具有最高价格的组合。

For eg,
In the data set available, the possible combinations would be
1011,1012,1014 - 4+6+8 = 18$
1012,1011,1013 - 6+4+10 = 20$
1013,1012 - 10+6 = 16$
1014,1011 - 8+4 = 12$

现在,详细信息 1012,1011,1013 的组合产生 20 美元,因此我获取此组合并将其添加到我的结果列表中。我怎样才能在java8中实现这一点?

任何帮助表示赞赏。谢谢!


嗯,首先这有点误导。在你的问题中你说pick the combination having the least price from it,但后来(和你的评论)你实际上提供了产生的样本max result.

假设您需要最大结果,您可以使用:

 long maxPrice = list
            .stream()
            .map(d -> Stream.concat(Stream.of(d.getDetailsId()), d.getStackableDetails().stream()))
            .map(s -> s.reduce(0L, (left, right) -> left +
                    list.stream()
                            .filter(dt -> dt.getDetailsId().equals(right))
                            .findAny()
                            .get()
                            .getPrice()))
            .max(Comparator.naturalOrder())
            .orElse(0L);

    System.out.println(maxPrice); // 20

EDIT

那么你想比较max price,但输出set做出这个价格。我唯一能想到的就是将它们放入TreeMap,但这不是非常可读恕我直言。此外,有时您的条目会发生冲突 - 它们具有相同的最高价格。此示例仅采用遭遇顺序中的最后一个。

  List<Long> highest = list
            .stream()
            .map(d -> Stream.concat(Stream.of(d.getDetailsId()), d.getStackableDetails().stream()).collect(Collectors.toList()))
            .collect(Collectors.toMap(s -> s.stream().reduce(0L,
                    (left, right) -> left + list.stream().filter(dt -> dt.getDetailsId().equals(right)).findAny().get().getPrice()),
                    s -> s.stream().collect(Collectors.toList()),
                    (left, right) -> right,
                    TreeMap::new))
            .lastEntry().getValue();

EDIT2

  Map<List<Long>, Long> map = list
            .stream()
            .map(d -> Stream.concat(Stream.of(d.getDetailsId()), d.getStackableDetails().stream()).collect(Collectors.toList()))
            .collect(Collectors.toMap(
                    s -> s.stream().collect(Collectors.toList()),
                    s -> s.stream().reduce(0L,
                            (left, right) -> left + list.stream().filter(dt -> dt.getDetailsId().equals(right)).findAny().get().getPrice()),
                    (left, right) -> right));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何组合列表元素并找到最大组合的价格 的相关文章

随机推荐

  • 使用jquery按需加载tinymce

    这是我的脚本 ajaxSetup async false getScript http www mydomain com dev js tinymce tiny mce js function tinyMCE init document b
  • 在亚马逊s3 boto存储桶中设置特定权限

    我有一个名为 ben bucket 的存储桶 该存储桶内有多个文件 我希望能够为每个文件 URL 设置权限 我不太确定 但我假设我是否想要存储桶内每个文件的 URL 我的网址会是这样吗 https ben bucket s3 amazona
  • PyMC3 中的简单动态模型

    我正在尝试在 PyMC3 中构建一个动态系统模型 以推断两个参数 该模型是流行病学中常用的基本SIR dS dt r0 g S I dI dt g I r S 1 其中 r0 和 g 是要推断的参数 到目前为止 我根本无法走得太远 我见过的
  • opencv物体轮廓角点检测

    I have images of a smelting cube forming into a droplet over time So far i extracted the contour of it but next i d need
  • ASP.NET Core 3.0 Razor Pages 中的路由本地化

    我想在 ASP NET Core 3 0 Razor Pages 应用程序中使用路由本地化 https stackoverflow com a 52976625 107718 https stackoverflow com a 529766
  • 使 JPA EntityManager 会话失效

    我正在开发的一个项目使用 Spring 2 5 和 JPA 并以 Hibernate 作为提供程序 我的 DAO 类扩展了 JpaDaoSupport 因此我使用 getJpaTemplate 方法获取 JpaTemplate 后端数据库可
  • 在VB6中编译DLL时出现“加载DLL时出错”

    我有一个使用引用的 Visual Basic 6 dll 项目 当单击 文件 gt 生成 dll 选项时 它应该生成一个 dll 文件 好吧 当单击 文件 gt 生成 dll 时 我收到错误 加载 DLL 时出错 如何查看缺少哪些参考文献
  • 由 twine python 发布的包未出现在存储库中

    我正在尝试将我的 python 包发布到私有存储库 我是按照官方指南来的https packaging python org en latest tutorials packaging projects https packaging py
  • 如何在已被 Rails 转义的正则表达式中转义 \\ ?

    我试图将正则表达式存储在数据库中 但它们被 Rails 转义了 例如 w s s变成 w s s在数据库中以及检索时 我插入尝试将它们与 mystring sub regex variable 一起使用 但转义的正则表达式未按预期匹配 解决
  • Mongodb:如何检查点是否包含在多边形中?

    我有一个点数组 纬度 经度 中某个区域的点列表 我已经在这些数组上创建了一个索引 现在我想知道一个点是否在该多边形内部 MongoDB 可以吗 我已经尝试过这些命令但没有运气 gt polygonA 48 780809 2 307129 4
  • 具有左右标签的 UITableViewCell 的最佳方法

    我的应用程序有多个可选择的设置 例如枚举值 我想复制 iOS 的声音设置表视图单元格 其中名称位于左侧 所选值位于右侧 后面是公开指示器 gt 到目前为止 我的方法是创建一个自定义表格视图单元格 xib和定制UITableViewCell类
  • 如何使用 jQuery 或纯 JS 重置所有复选框?

    如何使用 jQuery 或纯 JS 重置文档中的所有复选框 如果您的意思是如何从所有复选框中删除 选中 状态 input checkbox removeAttr checked
  • 有没有适用于Python3的工作内存分析器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Python 2 中有一些工具 但一切似乎都已经过时了 我找到了 PySizer 和 Heapy 但一
  • 使用 LINQ 查找数组中的最小和最大日期?

    我有一系列带有属性的类Date i e class Record public DateTime Date get private set void Summarize Record arr foreach var r in arr do
  • 多少个线程太多了?

    我正在编写一个服务器 当收到请求时 我将每个操作发送到一个单独的线程中 我这样做是因为几乎每个请求都会进行数据库查询 我正在使用线程池库来减少线程的构造 销毁 我的问题是 对于这样的 I O 线程来说 什么是一个好的截止点 我知道这只是一个
  • 使用新标签页替换插件打开新标签时,如何保持地址栏清晰?

    我正在为 Firefox 开发一个新的标签页替换插件 安装后 当我单击新选项卡图标打开新选项卡时 新选项卡打开正常 但地址栏显示混乱的 URL 资源 firefox p at getblog dot com getblog buttons
  • 使用字典更新 pandas DataFrame 行

    我在 pandas DataFrames 中发现了我不理解的行为 df pd DataFrame np random randint 1 10 3 3 index one one two columns col1 col2 col3 new
  • Rails 升级到 Angular 2

    我想升级现有的 Rails 和 Angular 1 x 应用程序 我正在关注 ng upgrade文档 https angular io docs ts latest guide upgrade html并看到有很多依赖项 包括system
  • WPF:TabControl 和动态 TabItem

    我正在尝试使用 C 中的 WPF 为我当前的项目创建一个 GUI 我想要有选项卡 在运行时动态创建 并且每个选项卡应该打开一个具有相同列标题但内容不同的表 我知道我可以实现这样的选项卡和表格
  • 如何组合列表元素并找到最大组合的价格

    我有一个类 其中包含特定项目的详细信息 如下所示 Detail class Long detailsId Integer price List