- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够将模型对象的 id 传递给方法,然后将其与该模型类型的所有其他对象进行比较,以查看其某些属性是否匹配。我知道您可以使用 Models Finder 进行更常规的查询,但我需要使用我编写的一些自定义方法来进行比较。有没有办法遍历所有现有的模型对象,将它们的属性与相关对象的属性进行比较,并将匹配项存储为某种列表。 Finder 能够做到这一点吗?
我正在使用 EBean。
更新:
所以我的模型实际上比我之前使用的书籍示例稍微复杂一些。它是一个存储用户旅程信息的模型。该模型的四个属性如下所示:
public Double sLat;
public Double sLon;
public Double eLat;
public Double eLon;
这些 double 代表旅程起点的纬度和经度以及终点的纬度和经度。我正在使用上一篇文章中描述的 Harvesine 公式:How can I measure distance and create a bounding box based on two latitude+longitude points in Java?
因此,在我的模型中,我将使用以下方法来计算两点之间的距离:
public static double distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
* Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist;
}
我已经使用一些硬编码的虚拟数据对此进行了测试,以查看使用此方法它是否按预期工作:
public static void journeyCompare(double lat1, double lng1, double lat2, double lng2,
double lat3, double lng3, double lat4, double lng4) {
double startMatch = distFrom(lat1, lng1, lat3, lng3);
if(startMatch<=5) {
System.out.println("Starting points are within five miles of each other");
double endMatch = distFrom(lat2, lng2, lat4, lng4);
if(endMatch<=5) {
System.out.println("Start and end points are within five miles of each other!!! JOURNEY MATCH");
}
else {
System.out.println("End points are too far apart");
}
}
else {
System.out.println("Starting points are too far apart");
}
}
所以我的问题实际上是如何使用这些方法 - 进行一次旅程,四个 double 代表其积分并将其与所有其他旅程进行比较。我不确定是否有办法使用 EBean finder 来分割它。
进一步更新:
所以我想我现在已经快到了,但我遇到了一个 Play 错误:没有找到 Double 类型的 QueryString 绑定(bind)器。我的新匹配器方法:
public static List<Journey> matcher(Double startLat, Double startLon, Double endLat, Double endLon) {
//Create a list to store matched journeys
List<Journey> matchList = new ArrayList<Journey>();
//Create a list that stores all pre-existing journeys
List<Journey> allJourneys = new ArrayList<Journey>();
allJourneys = find.all();
for(Journey journey : allJourneys) {
double distanceBetweenStart = distFrom(startLat, startLon, journey.sLat, journey.sLon);
//if the starting points are within 3 miles of each other
if(distanceBetweenStart <= 3) {
//check end points
double distanceBetweenEnd = distFrom(endLat, endLon, journey.eLat, journey.eLon);
if(distanceBetweenEnd <= 3) {
matchList.add(journey);
}
}
}
return matchList;
}
最佳答案
假设您使用 JPA 和 Hibernate 等库来实现持久性,有几种方法可以实现这一点。
public static List<Book> findMatch(Book id){
List<Book> allBooks = JPA.em().createQuery("FROM Book").getResultList();
List<Book> matchedBooks = new ArrayList<Book>();
for(Book b : allBooks){
if(isPossibleMatch(b, id)) //assuming you define a .isPossibleMatch() method
matchedBooks.add(b);
}
return matchedBooks;
}
或
public static List<Book> findMatch(Book id){
Query query = JPA.em().createQuery("SELECT b FROM Book b WHERE b.fieldOne = :fieldOne AND b.fieldTwo : fieldTwo");
query.setParameter("fieldOne", id.fieldOne);
query.setParameter("fieldTwo", id.fieldTwo);
return query.getResultList();
}
编辑:为了完整性,将保留上述内容,但这里是 Ebean 解决方案的编辑。
如 http://www.playframework.com/documentation/2.0.4/JavaEbean 中的示例所示,您可以为 Book 类实现静态“查找”字段。
public static Finder<Long,Book> find = new Finder<Long,Book>(Long.class, Book.class);
从那里,它与上面的 JPA 代码非常相似,但是通过调用
获取所有 Book 对象的列表的方式会有所不同Book.find.all()
但是,如果您希望能够在评论中执行操作,例如查找 2.50 美元到 4.50 美元之间的书籍,您可以使用 Finder 编写查询,如下所示:
Book.find.where().between("price", 2.5, 4.5).findList();
where() 方法应该对您有用,可以在http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/Query.html#where%28%29 找到。
关于java - 比较所有模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15642151/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!