- 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/
已结束。 这个问题是 off-topic .它目前不接受答案。 想要改进这个问题? Update the question所以它是on-topic堆栈溢出。 关闭 9 年前。 社区在4个月前审核了是否
我想做一个简单的函数,它接受一个数据框和用户为该数据框中的两列提供的名称。目的是让它可以轻松地与 dplyr 管道一起工作。它将产生一个粘合字符串的字符向量: func % func(lastName
使用 !! 时出现奇怪的结果: ["a"].indexOf("b") === -1 // true !!(["a"].indexOf("b") === -1) //true !!["a"].index
我想知道是否有可能创建一个单一的方法,比如说 Array#square(它对数组中的元素进行平方),它允许一个可选的 bang !标识符? 这样,接收者是否被永久修改只取决于该方法是否被调用。例如,是
我在具有两个主要组的长数据库 (full_database) 上运行一个函数,我需要在每个组的多个子集上执行各种线性模型。 然后,我将 R^2、调整后的 R^2 和 p.value 提取到一个数据框中
如果您阅读 jQuery inArray 页面上的评论 here ,有一个有趣的声明: !!~jQuery.inArray(elm, arr) 现在,我相信双感叹号会将结果转换为 boolean 类型
如果您阅读 jQuery inArray 页面上的评论 here ,有一个有趣的声明: !!~jQuery.inArray(elm, arr) 现在,我相信双感叹号会将结果转换为 boolean 类型
我使用动态变量(例如 ID )作为引用列名的方法,该列名将根据我当时正在处理的基因而改变。然后我使用 case_when 内的 mutate 创建一个新列,该列的值取决于动态列。 我认为 !! (ba
我在文件中有以下内容 demo.py:-//可执行位设置 #!/usr/bin/python import os 我在终端中使用了命令 bash demo.py 并期望第一行由 bash 解释,它将文
当我想引用在该 shell 中执行的最后一个命令时,我习惯于在 bash 中键入 !!。 $ ls -la drwxr-xr-x 4 me wheel 136 Jan 19 2013
在这个代码示例中,taking_damage 方法之前的感叹号有什么用? if warrior.health < 20 && !taking_damage?(warrior) warrior
按照惯例,我们向任何改变其参数的函数名称添加爆炸字符 !,因此对于以下代码示例,我们是否应该向仿函数添加 !名字? mutable struct Foo a::Int end (foo::Fo
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
如果没有对其参数进行硬编码,即 Me.VBProject.References!Excel,我无法成功使用 Bang (!) 运算符。在此示例中,Excel 引用是硬编码的。出于沮丧,我尝试了所有我能
我需要从 Java 小程序打开外部窗口。我怎样才能做到这一点而不使窗口成为小程序的子窗口?即使小程序关闭,我也需要窗口保持打开状态。我知道这是可以做到的。砰! Howdy 所做的正是我想要实现的目标。
这个问题已经有答案了: unnecessary exclamation marks(!)'s in HTML code (4 个回答) 已关闭 9 年前。 我遇到一个问题,我的 HTML 代码中出现
有没有办法检索 UNIX shell 将用于给定脚本的解释器的路径? (最好是在 Python API 中或作为 shell 命令)? 像这样使用: $ get_bang ./myscript.py
我有一个 Python 脚本 script.py,它已被定义为可执行文件并且以以下 sha-bang 开头: #!/usr/bin/env python -W all 但是当我从 shell 调用它时
是否可以在不使用赋值的情况下编写这段代码摘录? self.name = self.name.to_s.squeeze(' ').strip 我曾尝试使用 bang 版本的方法,但不能很好地使用,因为如
Airbnd suggests我这样做: !function() { // ... }(); 因为: This ensures that if a malformed module forgets
我是一名优秀的程序员,十分优秀!