通用置换函数元素比较给出编译器错误

问题描述 投票:1回答:2

我试图创建一个通用的next_permutation()函数,该函数将执行与C ++ next_permutation()函数相同的功能。编译器说:

二进制运算符'>'和'

在以下几行:

  • if (data.get(last) < data.get(last + 1))
  • if (if data.get(i) > data.get(last))

我该如何解决?

public static <T> boolean findNextPermutation(List<T> data) 
{ 


    if (data.size() <= 1) 
        return false; 

    int last = data.size() - 2; 

    while (last >= 0) { 
        if (data.get(last) < data.get(last + 1)) { 
            break; 
        } 
        last--; 
    } 

    if (last < 0) 
        return false; 

    int nextGreater = data.size() - 1; 

    for (int i = data.size() - 1; i > last; i--) { 
        if (data.get(i) > data.get(last)) { 
            nextGreater = i; 
            break; 
        } 
    } 

    data = swap(data, nextGreater, last); 

    data = reverse(data, last + 1, data.size() - 1); 

    return true; 
} 
java generics permutation
2个回答
2
投票

T可以是任何东西。它可能是Integer类型或String类型。 Integer可以拆箱到int并与<>比较,但String不能。

您需要缩小T的范围。一种方法是强制T实现Comparable。然后,您可以使用Comparable方法:

compareTo()

1
投票

如果compareTo()不执行或不能按照public static <T extends Comparable<T>> boolean findNextPermutation(List<T> data) { if (data.size() <= 1) return false; int last = data.size() - 2; while (last >= 0) { if (data.get(last).compareTo(data.get(last + 1)) < 0) { break; } last--; } if (last < 0) return false; int nextGreater = data.size() - 1; for (int i = data.size() - 1; i > last; i--) { if (data.get(i).compareTo(data.get(last)) > 0) { nextGreater = i; break; } } data = swap(data, nextGreater, last); data = reverse(data, last + 1, data.size() - 1); return true; } 的建议实施T,则可以提供Comparable并使用它:

this

旁注:您可以创建一个空友好的合作伙伴。例如:Comparator<T>

© www.soinside.com 2019 - 2024. All rights reserved.