- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 JSF 和 JPA 的 java ee 应用程序中,我必须计算对象列表中的属性总数。我使用LambdaJ库来实现求和的计算。
由于我在应用程序的多个位置使用此类求和,可能会对整体性能产生影响,因此我设计了以下测试 Java 应用程序来测试 LambdaJ 的功效。
该应用程序证明 LambdaJ 严重缺乏功效。
测试程序中是否有任何错误,或者我应该用迭代替换所有出现的 lambdaJ 吗?
结果
Time taken to calculate a single total by iteration is 15 milliseconds.
Time taken to calculate a single total by LambdaJ is 199 milliseconds.
Time taken to calculate multiple totals by iteration is 23 milliseconds.
Time taken to calculate multiple totals by LambdaJ is 114 milliseconds.
主要方法
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.lakmedi;
import ch.lambdaj.Lambda;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
*
* @author buddhika
*/
public class main {
public static void main(String[] args) {
List<Bill> bills = new ArrayList<>();
Random r = new Random();
for (int i = 0; i < 100000; i++) {
Bill b = new Bill();
b.setGrossTotal(r.nextDouble());
b.setDiscount(r.nextDouble());
b.setNetTotal(b.getGrossTotal() - b.getDiscount());
bills.add(b);
}
calSingleByIteration(bills);
calSingleByLambdja(bills);
calMultipleByIteration(bills);
calMultipleByLambdja(bills);
}
public static void calSingleByIteration(List<Bill> bills) {
Date startTime = new Date();
double grossTotal = 0.0;
for (Bill b : bills) {
grossTotal += b.getGrossTotal();
}
Date endTime = new Date();
long timeTaken = endTime.getTime() - startTime.getTime();
System.out.println("Time taken to calculate a single total by iteration is " + timeTaken + " milliseconds.");
}
public static void calSingleByLambdja(List<Bill> bills) {
Date startTime = new Date();
double grossTotal = Lambda.sumFrom(bills).getGrossTotal();
Date endTime = new Date();
long timeTaken = endTime.getTime() - startTime.getTime();
System.out.println("Time taken to calculate a single total by LambdaJ is " + timeTaken + " milliseconds.");
}
public static void calMultipleByIteration(List<Bill> bills) {
Date startTime = new Date();
double grossTotal = 0.0;
double discount = 0.0;
double netTotal = 0.0;
for (Bill b : bills) {
grossTotal += b.getGrossTotal();
discount += b.getDiscount();
netTotal += b.getNetTotal();
}
Date endTime = new Date();
long timeTaken = endTime.getTime() - startTime.getTime();
System.out.println("Time taken to calculate multiple totals by iteration is " + timeTaken + " milliseconds.");
}
public static void calMultipleByLambdja(List<Bill> bills) {
Date startTime = new Date();
double grossTotal = Lambda.sumFrom(bills).getGrossTotal();
double discount = Lambda.sumFrom(bills).getDiscount();
double netTotal = Lambda.sumFrom(bills).getNetTotal();
Date endTime = new Date();
long timeTaken = endTime.getTime() - startTime.getTime();
System.out.println("Time taken to calculate multiple totals by LambdaJ is " + timeTaken + " milliseconds.");
}
}
比尔类
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.lakmedi;
/**
*
* @author buddhika
*/
public class Bill {
private double grossTotal;
private double netTotal;
private double discount;
public double getGrossTotal() {
return grossTotal;
}
public void setGrossTotal(double grossTotal) {
this.grossTotal = grossTotal;
}
public double getNetTotal() {
return netTotal;
}
public void setNetTotal(double netTotal) {
this.netTotal = netTotal;
}
public double getDiscount() {
return discount;
}
public void setDiscount(double discount) {
this.discount = discount;
}
}
最佳答案
假设你的意思是efficiency而不是efficacy ,那么您测得的性能或多或少符合预期 - 请参阅 LambdaJ 自己的 performance analysis .
使用 Java 8 可能会获得更好的结果 Lambda Expressions ,但这里的主要目标是提高源代码的可读性和可维护性,而不是速度。您确定执行求和所需的时间对于应用程序的整体性能至关重要吗?考虑到 HTTP 流量 (JSF) 和数据库查询 (JPA) 的 (I/O) 等待时间,我对此表示怀疑,在这种情况下,这是 premature optimization (万恶之源)。
关于java - 在迭代中使用 LambdaJ 严重缺乏效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343897/
我有这样的代码: List back = new ArrayList(); for( ClassA classA : getClassAs() ) { if( classA instanceo
我们已经为 lambdaj 及其依赖项下载了 jar 文件,它们也是 jar 文件。我们不知道该怎么做。我们已将这些文件复制到 C:\Program Files\Java\jre6\lib\ext 已
这听起来像是一个愚蠢的问题,但是我如何开始使用 lambdaj 库?我下载了 lambdaj.jar 并将其与其他 jar 文件一起放在我的 web 应用程序的 lib 目录中。但我无法导入任何类(c
我正在尝试编写一个 Hamcrest 匹配器来验证返回类对象的方法的返回值。例如,给定类: public static class ClassHolder { private final Cl
有人试过在android开发中使用lambdaj库吗? 当我创建一个简单的小型 java 应用程序时,它对我来说工作正常,但我无法在 android 应用程序中使用它。 更新: 我正在添加 lambd
我希望能够使用 lambdaj 将子列表组合成单个列表。 我有一个有效的迭代版本: // HDU elements are children of each subsystem Collection
使用 Lambdaj,我尝试从列表中分离出满足 2 个单独条件的对象。以下两项都将实现我的目标。一) List someObjectsWithMatchingSomeObjectIds = s
在使用 JSF 和 JPA 的 java ee 应用程序中,我必须计算对象列表中的属性总数。我使用LambdaJ库来实现求和的计算。 由于我在应用程序的多个位置使用此类求和,可能会对整体性能产生影响,
如何在 lambdaj 中使用多个排序条件?例如获取首先按姓名排序的列表,然后按年龄排序: 姓名年龄 姓名A 14 姓名B 12 姓名B 15 名称C 10 名称C 11 感谢您的帮助。 最佳答案 看
代码: class MyClass { private String field1; private Long field2; //getters and setters al
lambdaj看起来是个不错的项目。开始使用它需要哪些实际步骤?我如何将它与我的 Maven 项目集成? 最佳答案 在 maven 项目中使用 lambdaj 非常简单,因为它在 maven 中央存储
我是 lambdaj 的新手。这似乎是 Java 编程的一个很棒的特性。 所以我创建了一个非常简单的评估程序。 但是我得到了以下代码的异常。你能帮我看看哪里出了问题吗? --EDITED 添加了无参数
我正在使用 lamdaj 表达式根据特定条件过滤列表。为了找到匹配项,正在使用 hamcrest 匹配器。 我的问题是,我想使用 AND 和 OR 运算符根据多个条件过滤列表,但我不知道该怎么做。 例
我一直在尝试自学 Lambdaj,它似乎不想随机化我的字符串数组。我是否应该将字符串添加到列表中以便能够使用 Lambdaj 处理集合。我想要做的就是获取一组字符串并使用 LambdaJ 以随机顺序打
如何使用 lambdaj 过滤表格? 给出下表: id name age male salary1 tom 22 y 3k2 nancy 24 n
在这种情况下,我根据条件将列表过滤为多个列表。 for(SomeObj someObj : someObjs) { if(StringUtils.equalsIgnoreCase(someOb
我有两个这样的类: public class Order{ private Integer id; private List positions; ... } public c
Lamdbaj允许在Java语言中定义闭包,可以找到各种例子 here 我的问题是关于使用中的底层 Java 机制,例如,要定义 println 闭包,使用以下代码: Closure println
在我去年做的一个 Java 集成项目中,我发现了 lambdaj,并立即相信它能够让我更快地生成更具可读性的代码。我记得当时也读过有关 lambda 表达式即将发布到 1.8 的信息,并且认为我找到了
我想用 lambdaj 从嵌套数组中提取一个对象。我的模型是一个包含“元素”数组的“产品”列表: public class Product { Element[] elements; } pub
我是一名优秀的程序员,十分优秀!