相关疑难解决方法(0)

如何简化null安全的compareTo()实现?

我正在compareTo()为一个简单的类实现方法(为了能够使用Collections.sort()和Java平台提供的其他好东西):

public class Metadata implements Comparable<Metadata> {
    private String name;
    private String value;

// Imagine basic constructor and accessors here
// Irrelevant parts omitted
}
Run Code Online (Sandbox Code Playgroud)

我希望这些对象的自然顺序为:1)按名称排序; 2)如果名称相同则按值排序; 两种比较都应该不区分大小写.对于这两个字段,空值完全可以接受,因此compareTo在这些情况下不得中断.

脑海中出现的解决方案与以下几行相似(我在这里使用"保护条款",而其他人可能更喜欢单个返回点,但这不是重点):

// primarily by name, secondarily by value; null-safe; case-insensitive
public int compareTo(Metadata other) {
    if (this.name == null && other.name != null){
        return -1;
    }
    else if (this.name != null && other.name == null){
        return 1;
    }
    else if (this.name != null && …
Run Code Online (Sandbox Code Playgroud)

java comparison null refactoring compareto

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

如何从Collection中获取最大值(例如ArrayList)?

有一个存储整数值的ArrayList.我需要在此列表中找到最大值.例如,假设arrayList存储的值是:10, 20, 30, 40, 50并且最大值将是50.

找到最大值的有效方法是什么?

@Edit:我刚刚发现了一个我不太确定的解决方案

ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(100); /* add(200), add(250) add(350) add(150) add(450)*/

Integer i = Collections.max(arrayList)
Run Code Online (Sandbox Code Playgroud)

这会返回最高值.

另一种比较每个值的方法,例如 selection sort or binary sort algorithm  

java

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

当参数字符串为null时,int compareTo()应该返回什么?

据说当输入参数为null时,compareTo()应抛出NullPointerException.但是,我正在实现一个需要将字段与String类型进行比较的类.这些字段不必是强制性的.我想知道在这种情况下,

1)当输入为空时我应该返回什么?任何非空字符串在字典上是大于还是小于null?

2)如果这被认为是不好的做法,是否有任何支持性论点?我应该强制用户使用空字符串吗?如果使用空字符串,那不会混淆字段不适用的情况和字段为空的情况吗?如果必须抛出异常,那么除了在手册中警告用户之外,我还能做什么?

编辑:我可能不会在这里清楚地表达自己,但在我正在实现的程序中,可以为null的字符串是所有字段或类,它们不应为null.换句话说,comparisonTo()使用的对象不能为null,只有它们的私有字段可以.所以在这种情况下,我相信如果我正确地实现了compareTo(),它就不会违反传递要求,因为具有空字段的类总是被认为是相同的.我是对的还是我在解释这个错误?

谢谢大家的答案!

java string null nullpointerexception compareto

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