キーではなく値に基づいて比較を行うカスタムコンパレータを使用してNavigableMapを実装しようとしています。私は非常に非常にJavaとコーディング一般的に私の用語がinccorectまたはコード恐ろしい場合は私を許して知っている!私は解決策を試してみて、複製するために同様の質問を見つける試みたが、私がコンパイルしようとすると、まだ次のエラーが供給しています:NavigableMap - 値に基づいて比較
java: no suitable constructor found for TreeMap(OrderLineSegments)
constructor java.util.TreeMap.TreeMap(java.util.Comparator<? super java.lang.Float>) is not applicable
(argument mismatch; OrderLineSegments cannot be converted to java.util.Comparator<? super java.lang.Float>)
constructor java.util.TreeMap.TreeMap(java.util.Map<? extends java.lang.Float,? extends java.lang.Float[]>) is not applicable
(argument mismatch; OrderLineSegments cannot be converted to java.util.Map<? extends java.lang.Float,? extends java.lang.Float[]>)
constructor java.util.TreeMap.TreeMap(java.util.SortedMap<java.lang.Float,? extends java.lang.Float[]>) is not applicable
(argument mismatch; OrderLineSegments cannot be converted to java.util.SortedMap<java.lang.Float,? extends java.lang.Float[]>)
フロートは[] 4つのfloatの配列です、私は次のことを実現しようとしています[ x1、y1、x2、y2]は線分を表す。
NavigableMap<Float, Float[]> segmentBST = new TreeMap<Float, Float[]>(new OrderLineSegments());
class OrderLineSegments implements Comparator<Map.Entry<Float, Float[]>> {
public int compare(Map.Entry<Float, Float[]> a, Map.Entry<Float, Float[]> b) {
float ypos;
if (a.getValue()[1] < a.getValue()[1]) {
ypos = a.getValue()[1];
} else {
ypos = b.getValue()[1];
}
float ratioA = (a.getValue()[1] - ypos)/(ypos - a.getValue()[3]);
float ratioB = (b.getValue()[1] - ypos)/(ypos - b.getValue()[3]);
float posA = Math.abs(a.getValue()[0] - a.getValue()[2]) * ratioA + a.getValue()[0];
float posB = Math.abs(b.getValue()[0] - b.getValue()[2]) * ratioB + b.getValue()[0];
if (posA < posB) return 1;
if (posA > posB) return -1;
return 0;
}
私は、これは、これを行うための最善の方法であるか、これがも可能ですので、もしどのような援助が大幅に高く評価されている場合でも、わかりません。
'Comparator'は*キー*を比較するために使われるので、' OrderLineSegments'は 'Comparator'を実装する必要があります。したがって、 'Map.Entry'を比較しようとしているときのエラーです。 –
Kayaman
docが言うように、エラーは正常であるようです: 'TreeMapのコンストラクタはコンパレータ super K>'を必要とし、 'Comparator 'を提供します。キーと値を逆にすることはできません。同じ値を持たない場合は、変更することがあります –
azro
あなたはNavigableMapの契約を破棄しています。この場合、ソートされたリストを使用するだけではどうですか? – daniu