相关疑难解决方法(0)

Apache Commons等于/ hashCode构建器

我很想知道,人们在这里想到使用 org.apache.commons.lang.builder EqualsBuilder/ HashCodeBuilder 实现equals/ hashCode?这比写自己更好吗?它与Hibernate相处得好吗?你怎么看?

java hibernate equals hashcode apache-commons

155
推荐指数
4
解决办法
8万
查看次数

Collections.sort包含多个字段

我有一个包含三个字段的"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)

出于某种原因,我没有排序顺序.建议在场之间放置空格,但为什么呢?

你看到代码有什么问题吗?

java sorting collections

71
推荐指数
8
解决办法
12万
查看次数

以(区分大小写)字母顺序对字符串进行排序的简单方法

我需要按字母顺序对字符串列表进行排序:

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 string alphabetical comparator

41
推荐指数
2
解决办法
12万
查看次数

按多个字段对对象列表进行排序

我有一个Java对象列表,我想根据多个字段进行排序.

public class graduationCeremony {
    String campus;
    String faculty;
    String building;
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用a ComparatorComparable界面根据多个字段对列表进行排序?我看到的所有例子都只根据一个字段排序.换句话说,人们可以按"校园"或"教师"或"建筑"进行排序.我想按"校园"排序,然后是"教师",然后是"建筑"(因为它存在于SQL中ORDER BY campus, faculty, building)

我认为之前已经提出过这个问题,但我不明白接受的答案.有人可以扩展或说明这个答案吗?

java sorting collections

34
推荐指数
3
解决办法
8万
查看次数

比较然后比较给出编译错误

我正在尝试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)

java comparable comparator java-8

8
推荐指数
1
解决办法
2032
查看次数

使用Java 8按字段排序作为输入

我有一个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)

关于如何更好地实现这一点的任何想法,以便它可以扩展到几乎没有维护的企业应用程序?

java sorting reflection comparator java-8

8
推荐指数
1
解决办法
1283
查看次数

在Java中使用Comparable实现VO的多个动态字段

我上课了

public class StudentVO {
   int age;
   String name;  
}
Run Code Online (Sandbox Code Playgroud)

我在两个不同的领域使用了同一个班级.在一个地方,我需要根据年龄排序.在另一个地方,我需要根据名称进行排序,在另一个地方,我可能需要根据年龄和名称进行排序.我怎样才能做到这一点?如果我可以覆盖一个字段compareTo().

是否有可能做到这一点?

java comparable comparator

7
推荐指数
2
解决办法
2万
查看次数

如何正确使用Java比较器?

如果我有以下课程:

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?

java sorting oop comparator

6
推荐指数
1
解决办法
8798
查看次数

部分多键映射的数据结构?

我有数据由映射到值的键组成,如下所示:

---------------------
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算法来回答任何查询.但问题是这棵树随着密钥的每个新部分呈指数级增长.

什么数据结构/算法更适合解决这个问题?请注意,关键部分可以是数字或字符串.

algorithm data-structures

6
推荐指数
1
解决办法
1038
查看次数

如何在Java中的Comparator类中使用lambda表达式

我是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 lambda comparator java-8

4
推荐指数
1
解决办法
519
查看次数