Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有两个可比较参数的最小/最大函数_Java_Comparable - Fatal编程技术网

Java 具有两个可比较参数的最小/最大函数

Java 具有两个可比较参数的最小/最大函数,java,comparable,Java,Comparable,我得到了以下片段: Comparable<C> a = ...; Comparable<C> b = ...; Comparable<C> min = a.compareTo(b) <= 0 ? a : b; 这将有助于内联表达式,但对于这样一个小任务,我仍然发现它很难阅读,而且开销有点太大 目前我正在使用我自己的效用函数,但我感兴趣的是: 如何以可读且独立于库的方式找到两个可比较的最小值,而不需要太多的性能开销 从java.util.Collecti

我得到了以下片段:

Comparable<C> a = ...;
Comparable<C> b = ...;
Comparable<C> min = a.compareTo(b) <= 0 ? a : b;
这将有助于内联表达式,但对于这样一个小任务,我仍然发现它很难阅读,而且开销有点太大

目前我正在使用我自己的效用函数,但我感兴趣的是:

如何以可读且独立于库的方式找到两个可比较的最小值,而不需要太多的性能开销

  • java.util.Collections
    :和

  • Apache Commons的开销较小,能够处理
    null
    值,但它是一个第三方库。

    第三方解决方案
    Collections
    max(collection)
    min(collection)
    方法,它们是您想要的方法

    将整个新库仅仅内联到一个简单的op中可能是一种过激的行为,除非您的组合中有apachecommonsGuava

    手工制作
    publicmax(ta,tb){
    返回a.compareTo(b)>=0?a:b;
    }
    公共T min(ta,tb){
    返回a.compareTo(b)<0?a:b;
    }
    
    我创建了自己的helper类,它通过
    min
    max
    isLessThan
    isLessOrEqualTo
    IsgreaterEqualto
    IsgreaterEqualto
    扩展了
    Compariable

    public interface Ordered<T> extends Comparable<T> {
    
      static <T extends Comparable<T>> T min(T a, T b) {
        return a.compareTo(b) <= 0 ? a : b;
      }
    
      static <T extends Comparable<T>> T max(T a, T b) {
        return a.compareTo(b) >= 0 ? a : b;
      }
    
      default boolean isLessThan(T other) {
        return compareTo(other) < 0;
      }
    
      default boolean isLessOrEqualTo(T other) {
        return compareTo(other) <= 0;
      }
    
      default boolean isGreaterThan(T other) {
        return compareTo(other) > 0;
      }
    
      default boolean isGreaterOrEqualTo(T other) {
        return compareTo(other) >= 0;
      }
    
    }
    
    对于我自己的
    Comparable
    实现,我扩展了
    Ordered
    ,并将其用于可读的比较。非常有助于枚举:

    public enum Board implements Ordered<Board> {
      NONE,
      BREAKFAST,
      HALF_BOARD,
      FULL_BOARD,
      ALL_INCLUSIVE
    }
    

    Guava有一个,但推荐了另一个(更详细的)Java 8替代方案:要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件。我将问题从“是否存在”改为“如何”,这将导致相同的答案,但希望阻止这样的标志。。。
    Comparable<C> a = ...;
    Comparable<C> b = ...;
    Comparable<C> min = ObjectUtils.min(a, b);
    
    public <T extends Comparable<T>> T max(T a, T b) { 
        return a.compareTo(b) >= 0 ? a : b; 
    }
    
    public <T extends Comparable<T>> T min(T a, T b) { 
        return a.compareTo(b) < 0 ? a : b; 
    }
    
    public interface Ordered<T> extends Comparable<T> {
    
      static <T extends Comparable<T>> T min(T a, T b) {
        return a.compareTo(b) <= 0 ? a : b;
      }
    
      static <T extends Comparable<T>> T max(T a, T b) {
        return a.compareTo(b) >= 0 ? a : b;
      }
    
      default boolean isLessThan(T other) {
        return compareTo(other) < 0;
      }
    
      default boolean isLessOrEqualTo(T other) {
        return compareTo(other) <= 0;
      }
    
      default boolean isGreaterThan(T other) {
        return compareTo(other) > 0;
      }
    
      default boolean isGreaterOrEqualTo(T other) {
        return compareTo(other) >= 0;
      }
    
    }
    
    String first = "a";
    String second = "b";
    System.out.println(Ordered.min(first, second)); // Prints "a"
    
    public enum Board implements Ordered<Board> {
      NONE,
      BREAKFAST,
      HALF_BOARD,
      FULL_BOARD,
      ALL_INCLUSIVE
    }
    
    Board requestedBoard = ...;
    Board availableBoard = ...;
    if (requestedBoard.isLessOrEqualTo(availableBoard)) {
      ...
    }