- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要你们的帮助,因为我被这个问题困住了。
如何从以下结果中以编程方式识别并打印每个类别仅 1(一个)“性价比最高”记录?考虑到单价、运营成本和投资回收时间。
有通用的公式吗?
我有一段 Java 代码,它通过一些计算从数据库获取一些数据,并生成下面的结果。
ABProduct abproduct = null;
ArrayList result_new = new ArrayList();
result_new.addAll(ProductDao.getProdutcs(customer, country));
if(result_new!=null){
for(int i=0; i<result_new.size(); i++) {
abproduct = (ABProduct) result_new.get(i);
aID = abproduct.getID();
aName = abproduct.getName();
aPrice = abproduct.getPrice();
aCategory = abproduct.getCategory();
//The below variable are calculated on fly
aCost = ...
aPaybackTime = ...
//Here I print the results
}
}
结果如下所示:
ID Name Unit Price Category Operating Cost Payback Time
11 AA1CC0 88.41 3 146.5 4.6
9 AA22VB 64.99 3 146.94 1.9
10 AA3BN5 79.69 3 147.51 4.1
18 AA47VV 88.08 3 147.63 5.3
17 AA5HJ2 79.32 3 149.55 5.6
16 AA61YA 75.24 3 150.16 5.4
21 AA9Y0A 104.99 5 140.74 3.9
33 AA10DA 182.03 5 140.74 9.4
40 AA11K1 119.99 5 140.82 5
32 AA121D 154.99 5 141.25 7.7
27 AA13S1 159.89 5 141.8 8.5
38 AA1433 102.05 5 141.93 4
41 AA15D0 139.99 5 141.97 7
31 AA166D 109.89 5 142.07 4.7
36 AA17D3 149.99 5 142.07 7.9
30 AA187H 99.99 5 142.17 4
35 AA19G5 129.99 5 142.17 6.3
22 AA20P4 119.99 5 142.39 5.6
39 AA21K8 109.95 5 142.52 4.9
20 AA228I 88.84 5 142.81 3.2
29 AA239O 92.47 5 142.96 3.6
24 AA241C 102.5 5 143 4.4
19 AA259L 73.99 5 143.08 2
23 AA260K 79.99 5 143.13 2.6
26 AA277B 84.99 5 143.35 3.1
34 AA28YI 305.99 5 144.51 24.9
42 AA31Y0 189.99 6 139.47 9.1
45 AA32Y9 138.14 6 139.54 5.8
44 AA33R7 129.99 6 140 5.4
46 AA34R4 203.11 6 140.25 10.5
43 AA35A3 99.99 6 140.37 3.5
47 AA36A4 229.99 6 140.38 12.5
48 AA37Q5 341.99 6 140.57 20.5
50 AA40DF 199.99 7 136.44 8.2
52 AA41CC 402.95 7 136.88 19.7
51 AA42VG 279.99 7 137.73 13.5
49 AA43EW 195.33 7 137.97 8.6
我需要的是(我不知道我是否从类别 5 中找到了正确的项目):
ID Name Unit Price Category Operating Cost Payback Time
9 AA22VB 64.99 3 146.94 1.9
20 AA228I 88.84 5 142.81 3.2
43 AA35A3 99.99 6 140.37 3.5
50 AA40DF 199.99 7 136.44 8.2
最佳答案
所以这里有几个选项。最直接的选项(也适用于您不使用数据库的情况)是按类别分隔所有内容,然后进行排序。 map 对此很有意义,例如:
Map<Integer,List<Product>>
或例如 Multimap
from Guava or whatever - ArrayListMultimap
将特别适合,因为它返回方便修改的值 List
您可以直接排序;另一种选择是 TreeMultimap
,它允许您在创建时指定一个值比较器,并且产品将自然地最终排序)。Collections.sort
和自定义比较器),从每个列表中提取第一项,这就是您的结果。您必须有一种方法,使计算出的投资回收时间值可供比较器使用,对此您有几种选择:
getPaybackTime()
方法ABProduct
并在那里进行计算。这样,您的计算就位于一个合理的位置,您可以在任何需要的地方访问它们,例如对产品列表进行排序时使用比较器。Here's a quick and dirty example .
第二个选项是使用您正在使用的任何 O[RM/数据库 API 的查询构建功能,以在 SQL 查询中完成这一切。我不会在这里详细介绍,因为“如何选择组中的最小值”是一个非常常见的问题,有多种技术(例如,请参见SQL: Group by minimum value in one field while selecting distinct rows)。
为您服务的方法是在 SQL 查询本身中进行“投资回收时间”计算数学,并指定您对正在使用的任何 ORM/数据库 API 提出的任何查询(您不这样做) t 指定,并且超出了该答案的范围),请注意您可以使用 SQL 执行类似的操作(由数学组成):
SELECT
*,
UnitPrice - OperatingCost AS Whatever
FROM
Products
这里的缺点是,现在您已经在 SQL 查询中进行了数学计算,而它可以说是业务功能而不是数据访问功能。为了使这至少在某种程度上易于管理,如果您的数据库支持它( MySQL, for example ),您可能至少需要使用此数学创建一个 View ,并且可能将计算列添加为实体类中的字段。
第二个基于 SQL 的选项可能有点笨拙,所以我只是从第一个业务方方法(按类别分离产品、排序、组装结果)开始。从哲学上讲,无论如何,它可能更合适:这是一个业务级别的操作,在业务方面进行会更干净一些。
这个答案并不完全完整,但希望对您有所帮助。
<小时/>顺便说一句,对于第一个选项(组织然后排序),您可能真正想做的是向数据层添加一个“类别”实体,假设您有一个类别表,并设置一个适当的一对多的类别与产品关系。
然后你可以有一个dao方法来获取所有类别。这样您就可以查询类别列表,然后遍历每个类别并直接获取该类别中的产品并进行排序(在业务方面)。制作getPaybackTime()
产品实体中进行计算的方法也会对您有所帮助。
如果您这样做,您可以跳过划分类别步骤,因为您现在可以直接通过数据层执行此操作。这也会带来一些性能和内存使用方面的好处。
这是我个人选择的实现方式。
关于java - 从结果中识别出 "best bang for the buck"项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42847216/
上下文 我有一个日间 TUMBLINGWINDOW(类似于下面所示的) SELECT DATEADD(day, -1, System.Timestamp()) AS WindowStart
因此,我正在开发一个非常小的 Web 组件,以作为更大的设计系统的一部分。 我对网络组件的使用有点陌生,但我知道这个特定的网络组件可以在一个布局中使用很多很多次。 此 Web 组件控制在传递给它的任何
我刚刚开发了一个 Android 应用程序(minSdkVersion 23/targetSdkVersion 29),可以连接到 BluetoothLE 设备以定期获取数据。 现在,在 MainAc
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我一直在阅读有关 Airplay SDK 和 Dragonfire SDK 的内容。这些是在没有 Mac 的情况下进行 iphone 开发的合法选择吗?大家有更好的解决办法吗? 最佳答案 由于签名等原
我正在考虑使用 DTO 而不是传递我的域对象。我在这里和其他地方都读过几篇文章,我知道有几种方法可以完成这项工作。 如果我总共只有大约 10 个域类,并且考虑到我想在我的 View (WPF 前端)中
我的问题是,如果我有一个列表 list = [1,2,3,4,5,6,7] 如果我想知道这个列表中元素的数量,是len(list) 或 list.count 更好的选择?还是 .count 仅适用于来
我想知道 Django Rest Framework 的最佳实践。我一直通过每个用户使用不同的序列化程序(员工、帐户所有者、其他人)和 HTTP 方法来限制更改帐户上某些属性的访问权限,但我觉得这太不
我有数百个用于测试组件的脚本。这些脚本中的每一个都包含一组下标和单独的记录。 下标可以在多个 TC_Level 脚本中使用,甚至可以在其他下标中使用。 每个脚本都有一个唯一的名称。 例子: TC_1
我正在建立一个以两种语言提供产品信息的网站:英文和中文。 每个产品必须有英文名称,也可以有中文名称。 每次请求产品页面时,request检查对象以确定产品名称应该以英文还是中文显示。在后一种情况下,如
场景:应用程序具有可以启用某些优化的算法。默认情况下,有些是打开的,有些是关闭的。在 Java 中是否有一种方便的方法来实现某种全局属性系统? 要求: 必须很容易两次使用不同的设置运行程序的多个实例
我从事嵌入式工作,我有一些管理硬件的软件模块。这个模块有状态,状态转换很复杂:根据事件,模块可以从状态 A 到状态 B 或者可能到 C .但是,当它退出某个状态时,它应该对硬件执行一些操作,以使其也保
我有一个免费网站,可以流式传输实时股票期权数据。我想让用户制作并保存他们自己的 JavaScript 可调用工具来解释选项数据。用户可以调用这些自定义工具来帮助他们自己做出有关期权的买卖决定。 但对于
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 2 年前。 社区在 6 个
我不是 DBA,我不知道什么是最好的解决方案。我有两个表, Custumers Table CustomerId (primary key, identity) ... 和 Suppliers Tab
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
我一直在阅读关于版本控制主题的所有问题,但我认为我没有找到一个看起来像我自己的场景。 场景是: 我们有一个中型/大型 Web 应用程序,它有(至少应该有)一个部署到所有客户端的核心。当我们向客户演示应
我希望根据继承来组织一些项目,目的是确定哪些项目是连接最密集的父项,并且还只是看到形成的连接。 通常这将通过拓扑排序来完成,但我的图有循环。是否有类似“尽力而为”拓扑排序的东西,它可以尝试根据连接数或
以下在 JQuery 中附加事件处理程序的方法有什么区别? (function () { var $body = $("body"); $('button').click(functi
我是一名优秀的程序员,十分优秀!