我从C#开始,现在我将使用Java。我需要在Java中实现一个简单的linq查询(filter + get)。
C#等价物可以是:
public interface IPriceRule
{
bool IsMatch(OrderItem item);
decimal CalculatePrice(OrderItem item);
}
//
_pricingRules = new List<IPriceRule>();
//...
public decimal CalculatePrice(OrderItem item)
{
return _pricingRules.First(r => r.IsMatch(item)).CalculatePrice(item);
}
知道java没有Linq,我遇到的第一件事就是扩展方法,但也不存在。 然后我必须做所有(也许我因为简单而导致坏习惯):
@Override
public BigDecimal CalculatePrice(OrderItem item) {
IPriceRule _selectedRule = getFirstItemThatMatch(_pricingRules, item);
if(_selectedRule != null)
return _selectedRule.CalculatePrice(item);
else
return BigDecimal.ZERO;
}
private IPriceRule getFirstItemThatMatch(List<IPriceRule> prmCollection, OrderItem item) {
IPriceRule _result = null;
for(IPriceRule itemPriceRule : prmCollection) {
if(itemPriceRule.IsMatch(item)) {
_result = itemPriceRule;
break;
}
}
return _result;
}
我不相信这个java代码是等价的,最优的。也许存在一种在算法复杂度和编码速度方面优化和改进它的技术。
我相信 .net优化并规范化查询并使用linq将其带给您,与您可以编写的代码进行比较。
答案 0 :(得分:1)
如您所知,LINQ不支持Java(reference)。
但您可以将任何ORM用于数据库层作为Hibernate / JPA。在.NET中,我使用了nHibernate,它相当于Java中的hibernate(所以我很容易下载)。
但LINQ不是ORM(抽象类),所以你不会有完整的玻璃。
答案 1 :(得分:0)
松散地说,我猜你需要考虑在Java中使用一些ORM。
例如,Hibernate或Entity EJB或JPA。这些是
在某种程度上类似于C#的LINQ to SQL。你不需要这样做
这一切都是用Java自己做的。 Java和Java都有所不同
在这方面提供更多恕我直言......如果你只是在寻找
一般来说,lambda表达式可以检查一下。
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
但似乎只有Java 8才能使用lambda表达式。