我很想知道,人们在这里想到使用
org.apache.commons.lang.builder EqualsBuilder/ HashCodeBuilder
实现equals/ hashCode?这比写自己更好吗?它与Hibernate相处得好吗?你怎么看?
我有一个包含三个字段的"Report"对象列表(All String type) -
ReportKey
StudentNumber
School
Run Code Online (Sandbox Code Playgroud)
我有一个排序代码像 -
Collections.sort(reportList, new Comparator<Report>() {
@Override
public int compare(final Report record1, final Report record2) {
return (record1.getReportKey() + record1.getStudentNumber() + record1.getSchool())
.compareTo(record2.getReportKey() + record2.getStudentNumber() + record2.getSchool());
}
});
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我没有排序顺序.建议在场之间放置空格,但为什么呢?
你看到代码有什么问题吗?
我需要按字母顺序对字符串列表进行排序:
List<String> list = new ArrayList();
list.add("development");
list.add("Development");
list.add("aa");
list.add("AA");
list.add("Aa");
Run Code Online (Sandbox Code Playgroud)
一种常见的方法是使用比较器:
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
Run Code Online (Sandbox Code Playgroud)
CaseInsensitiveComparator的问题是"AA"等于"aa".字符串根据相同值的添加顺序出现在结果中,并且不正确:
"aa","AA","Aa","development","Development"
Run Code Online (Sandbox Code Playgroud) 我有一个Java对象列表,我想根据多个字段进行排序.
public class graduationCeremony {
String campus;
String faculty;
String building;
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用a Comparator或Comparable界面根据多个字段对列表进行排序?我看到的所有例子都只根据一个字段排序.换句话说,人们可以按"校园"或"教师"或"建筑"进行排序.我想按"校园"排序,然后是"教师",然后是"建筑"(因为它存在于SQL中ORDER BY campus, faculty, building)
我正在尝试List按名称对员工进行排序,然后使用Java8 Comparator,我在下面创建Comparator但是它给了我一个编译器错误
Type mismatch: cannot convert from Comparator<Object> to <unknown>
Comparator<String> c = Comparator.comparing(s -> s.split("\\s+")[0])
.thenComparingInt(s -> Integer.parseInt(s.split("\\s+")[1])); //compile error
Run Code Online (Sandbox Code Playgroud)
但是如果我明确指定Type,它就可以工作
Comparator<String> c = Comparator.<String, String> comparing(s -> s.split("\\s+")[0])
.thenComparingInt(s -> Integer.parseInt(s.split("\\s+")[1])); //works
Run Code Online (Sandbox Code Playgroud)
或者通过创建两个Compartors和链
Comparator<String> name = Comparator.comparing(s -> s.split("\\s+")[0]);
Comparator<String> age = Comparator.comparingInt(s -> Integer.parseInt(s.split("\\s+")[1]));
Comparator<String> cc = name.thenComparing(age); //works
Run Code Online (Sandbox Code Playgroud)
我已Comparator<String>在左侧指定了类型,但为什么自动类型推断未找到正确的类型并期望明确指定.
有人可以澄清一下吗?
这是代码
String[] arr = { "alan 25", "mario 30", "alan 19", "mario 25" };
Comparator<String> c = …Run Code Online (Sandbox Code Playgroud) 我有一个REST端点和我想的UI来传递他们希望通过自己的排序结果中的字段名称"id","name"等我想出了下面,但真的想使用反射/泛型所以这可能是扩大到包括每我的项目中的对象.
如果我想为100个不同的类提供相同的功能,我觉得这个解决方案不易维护.
public static void sort(List<MovieDTO> collection, String field) {
if(collection == null || collection.size() < 1 || field == null || field.isEmpty()) {
return;
}
switch(field.trim().toLowerCase()) {
case "id":
collection.sort(Comparator.comparing(MovieDTO::getId));
break;
case "name":
collection.sort(Comparator.comparing(MovieDTO::getName));
break;
case "year":
collection.sort(Comparator.comparing(MovieDTO::getYear));
break;
case "rating":
collection.sort(Comparator.comparing(MovieDTO::getRating));
break;
default:
collection.sort(Comparator.comparing(MovieDTO::getId));
break;
}
}
Run Code Online (Sandbox Code Playgroud)
关于如何更好地实现这一点的任何想法,以便它可以扩展到几乎没有维护的企业应用程序?
我上课了
public class StudentVO {
int age;
String name;
}
Run Code Online (Sandbox Code Playgroud)
我在两个不同的领域使用了同一个班级.在一个地方,我需要根据年龄排序.在另一个地方,我需要根据名称进行排序,在另一个地方,我可能需要根据年龄和名称进行排序.我怎样才能做到这一点?如果我可以覆盖一个字段compareTo().
是否有可能做到这一点?
如果我有以下课程:
public class Employee {
private int empId;
private String name;
private int age;
public Employee(int empId, String name, int age) {
// set values on attributes
}
// getters & setters
}
Run Code Online (Sandbox Code Playgroud)
如何使用按名称比较的比较器,然后是年龄,然后是id?
我有数据由映射到值的键组成,如下所示:
---------------------
Key | Value
---------------------
(0, 0, 0, 0) | a
(0, 0, 0, 1) | b
(0, 1, 0, 1) | c
(0, 1, 1, 0) | d
....
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种数据结构,可以通过密钥有效地执行搜索查询,其中查询可以是完整的或部分地指定密钥.例如:
(0, 0, 0, 1) -> a
(0, *, *, *) -> [a, b, c, d]
(0, 1, *, *) -> [c, d]
Run Code Online (Sandbox Code Playgroud)
我现在的想法是使用常规树来实现它,类似于:
叶节点表示值,非叶节点是键的一部分(即,w,x,y和z节点分别是键的第一,第二,第三和第四部分).可以使用简单的BFS算法来回答任何查询.但问题是这棵树随着密钥的每个新部分呈指数级增长.
什么数据结构/算法更适合解决这个问题?请注意,关键部分可以是数字或字符串.
我是Java的新手,现在我必须创建一些Comparator类.
在这个Stackoverflow页面上,我发现了一些关于使用lambda表达式的非常有用的信息.如何通过多个字段比较对象
这让我有关创建这样的Compartor类的事情:
public class WidthComparator implements Comparator{
@Override
public int compare(Object t, Object t1) {
Foto foto1 = (Foto)t;
Foto foto2 = (Foto)t1;
return Comparator.comparing(Foto::getWidth)
.thenComparing(Foto::getHeight)
.thenComparingInt(Foto::getName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以当我有一个名为fotosCollection的集合时,我希望能够这样做:
fotosCollection.sort(new HoogteComparator());
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,但我怎么能让它工作?
PS.我必须使用Comparator类.
java ×9
comparator ×6
sorting ×4
java-8 ×3
collections ×2
comparable ×2
algorithm ×1
alphabetical ×1
equals ×1
hashcode ×1
hibernate ×1
lambda ×1
oop ×1
reflection ×1
string ×1