标签: comparable

使用TreeMap时,Java"无法转换为Comparable"

可能重复:
Java:SortedMap,TreeMap,Comparable?如何使用?

我正在使用Java JungI图形包和Netbeans 7.我从Java得到以下错误:

 Exception in thread "main" java.lang.ClassCastException: graphvisualization.MyVertex cannot be cast to java.lang.Comparable
    at java.util.TreeMap.put(TreeMap.java:542)
Run Code Online (Sandbox Code Playgroud)

以下是与错误相关的代码:

SortedMap<MyVertex, Double> vMap = new TreeMap<MyVertex, Double>();
       double curRank = 0;
       for(MyVertex v: g.getVertices())                 //g is a SparseGraph<MyVertex, MyEdge>
       {
           curRank = vertexRank.getVertexScore(v);
           vMap.put(v, curRank);                        //**Here is my Error**
       }
Run Code Online (Sandbox Code Playgroud)

MyVertex类是我为图表制作的一个类.以下是MyVertex的代码

public class MyVertex 
{
    int vID;                    //id for this vertex
    double centrality;          //centrality measure for this vertex
    int degree;                 //the degree of this vertex

    public MyVertex(int id)
    {
        this.vID …
Run Code Online (Sandbox Code Playgroud)

java casting treemap comparable sortedmap

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

Java - 使对象集合友好

如果一个对象拥有一个唯一的主键,那么它需要实现哪些接口才能实现集合友好,特别是在高效排序,可清洗等方面...?

如果主键是字符串,那么如何最好地实现这些接口?

谢谢!

java collections hash set comparable

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

什么是Scala的可比性特征?

我正在寻找C#IComparable的Scala对应物,我找到了可比较的特性.我的意思是 - 提到可比较,但是当我在http://www.scala-lang.org/api/current/scala/搜索它时,我得到0次点击.由于这个名字,使用Google我得到了很多"Scala如何与......相比"的结果.

有什么资源我可以读到这个神秘的可比较的东西吗?在所有Ordered延伸之后,它必须存在.

scala traits comparable

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

你如何干净地实现compareTo方法?

目前我正在以二进制函数的形式编写compareTo方法:ax ^ 2 + bx + c.

a,b,c是通过构造函数传递给类的整数系数.

在compareTo方法中,我应该首先比较两个函数之间的a系数,但如果它们相等,我比较b系数.如果b是相等的,我比较c.

我为此提出的方法最终变得非常难看:

public int compareTo(QuadraticFunction other)
{
    if (a > other.a)
        return 1;
    else if (a < other.a)
        return -1;
    else if (b > other.b)
        return 1;
    else if (b < other.b)
        return -1;
    else if (c > other.c)
        return 1;
    else if (c < other.c)
        return -1;
    else
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道,如果你有这些"分层"的比较系统(比如在c之前比较a之前的b),那么实现它们的最佳方法是什么?如果你不得不经历10多个变量,我无法想象会像我一样编写一个方法.

java comparable

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

Java - compareTo和运算符

如果我有一个类Person实现Comparable(比较personA.heightpersonB.height,例如),是有可能使用

    personA < personB
Run Code Online (Sandbox Code Playgroud)

作为替代品

    personA.compareTo(personB) == -1? 
Run Code Online (Sandbox Code Playgroud)

这样做有什么问题,还是我需要重载操作符?

java operators compareto comparable

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

无法在基本类型double上调用compareTo(double)

该行return array[index1].compareTo(array[index2]);提供错误"无法在基本类型double上调用compareTo(double)".如何解决这个问题?

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*::  This function implements a comparator of double values        :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private class ArrayIndexComparator implements Comparator<Integer>
{
    private final double[] array;

    public ArrayIndexComparator(double[] array)
    {
        this.array = array;
    }

    public Integer[] createIndexArray()
    {
        Integer[] indexes = new Integer[array.length];
        for (int i = 0; i < array.length; i++)
        {
            indexes[i] = i; // Autoboxing
        }
        return indexes;
    }

    @Override
    public int compare(Integer index1, Integer index2)
    {
         // Autounbox from Integer to int to use …
Run Code Online (Sandbox Code Playgroud)

java compare compareto comparable

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

结合varargs和泛型用于Java中的链式比较

这是一个难以破解的坚果.我在使用varargs和泛型之间发生了冲突.给定代码:

public class MyObject implements Comparable<MyObject>
{
    private String name;
    private int index;

    @Override
    public int compareTo(MyObject o)
    {
        if (name.compareTo(o.name) != 0)
            return name.compareTo(o.name);
        return ((Integer) index).compareTo(o.index);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望该compareTo方法使用多个比较条件.如果字符串相同,则使用ints代替.通常情况我会说.
我希望创建一个静态方法来处理这个问题.我希望chainedCompare像这样调用新方法:

public int compareTo(MyObject o)
{
    return chainedCompare(this, o, myO -> myO.name, myO -> myO.index);
}
Run Code Online (Sandbox Code Playgroud)

lambdas是Java 8接口函数的变量.所以首先我写了这样的方法:

public static <T, C extends Comparable<C>> int chainedCompare(T object1, T object2, Function<T, C>... comparisons)
{
    int compareValue = 0;
    for (Function<T, C> comparison : comparisons)
    {
        compareValue …
Run Code Online (Sandbox Code Playgroud)

java generics wildcard variadic-functions comparable

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

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

我正在尝试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
查看次数

比较 和 任何 有什么区别?

我尝试在 Go 中使用泛型,但我不太明白何时使用anyorcomparable作为类型参数。有人可以帮助理解这些吗?

generics go comparable any

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

确保 Go 1.20 中编译时的严格可比性?

在 Go 1.18 和 Go 1.19 中,我可以确保在编译时类型是严格可比较的,即它支持==!=运算符,并且保证它们在运行时不会出现恐慌

例如,这对于避免无意中向结构添加可能导致不必要的恐慌的字段很有用。

我只是尝试comparable用它实例化:

// supports == and != but comparison could panic at run time
type Foo struct {
    SomeField any
}

func ensureComparable[T comparable]() {
    // no-op
}

var _ = ensureComparable[Foo] // doesn't compile because Foo comparison may panic
Run Code Online (Sandbox Code Playgroud)

由于约束的定义,这在 Go 1.18 和 1.19 中是可能的comparable

预先声明的接口类型可比较表示所有可比较的非接口类型的集合

尽管 Go 1.18 和 1.19 规范没有提及不是接口但也不能严格比较的类型,例如[2]fmt.Stringeror struct { foo any },gc …

generics go comparable compile-time-type-checking

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