【问题标题】:Greater than and less than in one statement大于和小于一个语句
【发布时间】:2011-06-06 12:34:29
【问题描述】:

我想知道,你有一个巧妙的方法吗?

if(orderBean.getFiles().size() > 0  && orderBean.getFiles().size() < 5)

没有声明其他地方不需要的变量?

int filesCount = orderBean.getFiles().size();
if(filesCount > 0  && filesCount < 5) {

我的意思是,在 for 循环中,我们为实际迭代“声明条件”,可以声明一个变量,然后指定条件。这里做不到,也做不到

if(5 > orderBean.getFiles().size() > 0)

【问题讨论】:

  • java 不是 python :)
  • 我想不出不丑的方法。是的,您似乎确实受到了 Python 的启发。 =)
  • 嘿,有人要问了,我刚拿了子弹:-P
  • order.isFileCountValid()? (或者任何这段代码的意思。)如果这是 Python,我们不应该告诉对象做什么而不是链接 get 方法吗?

标签: java operators


【解决方案1】:

这是一种丑陋的做法。我只会使用一个局部变量。

编辑:如果 size() > 0 也是如此。

if (orderBean.getFiles().size() + Integer.MIN_VALUE-1 < Integer.MIN_VALUE + 5-1)

【讨论】:

  • 就是这个 :-) 我很久以前就看到过这个,但我没有使用它,所以我把它弄丢了。但这正是我的意思:-) 谢谢
  • 你的意思是 orderBean.getFiles().size() -5
  • 切割器是的,但这不会帮助任何机构在六个月内理解您的代码
  • 没错,幸好我不是一个团队合作者,我自己做事:-)
  • 对 orderBean.getFiles().size() == 0 无效 .. 它不强制文件数应大于零
【解决方案2】:

如果 getFiles() 返回 java.util.Collection!getFiles().isEmpty() && size 可以。

另一方面,除非你封装提供boolean sizeBetween(int min, int max)等方法的容器。

【讨论】:

    【解决方案3】:

    java 不是 python。

    你不能这样做

    if(0 < i < 5) or if(i in range(0,6))
    

    你提到了最简单的方法:

    int i = getFilesSize();
    if(0 < i && i < 5){
        //operations
    
    }
    

       if(0 < i){
           if(i < 5){
              //operations
           }
         }
    

    【讨论】:

      【解决方案4】:

      几个第三方库都有封装范围概念的类,例如 Apache commons-lang 的 Range(和子类)。

      使用这样的类,你可以表达你的约束,类似于:

      if (new IntRange(0, 5).contains(orderBean.getFiles().size())
      // (though actually Apache's Range is INclusive, so it'd be new Range(1, 4) - meh
      

      额外的好处是范围对象可以在类的其他地方定义为常量值。

      但是,如果不引入其他库并使用它们的类,Java 的强大语法意味着您无法通过修改语言本身来很好地提供此功能。而且(在我自己看来),仅仅为了这少量的语法糖而引入第三方库是不值得的。

      【讨论】:

        【解决方案5】:

        如果这真的很困扰你,为什么不编写自己的方法isBetween(orderBean.getFiles().size(),0,5)

        另一种选择是使用isEmpty,因为它更清晰:

        if(!orderBean.getFiles().isEmpty() && orderBean.getFiles().size() < 5)
        

        【讨论】:

          【解决方案6】:

          简单实用方法:

          public static boolean isBetween(int value, int min, int max)
          {
            return((value > min) && (value < max));
          }
          

          【讨论】:

          • 好的,我想我结束了,人们希望它是一个静态方法。我认为使用 apache commons IntRange 对象更方便
          【解决方案7】:

          请在某处写一个静态方法然后写:

          if( isSizeBetween(orderBean.getFiles(), 0, 5) ){
              // do your stuff 
          }
          

          【讨论】:

            【解决方案8】:

            现在你可以使用lodash:

            var x = 1;
            var y = 5;
            var z = 3;
            _.inRange(z,x,y);
            //results true
            

            【讨论】:

            • 问题是关于 Java,而不是 Javascript :)。
            • 问题是关于 Java 的。 _有个Java端口,但您至少应该链接到它们并以Java语法提供您的代码。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-03
            • 2018-09-27
            • 2015-10-17
            • 2020-11-05
            • 1970-01-01
            • 1970-01-01
            • 2014-03-29
            相关资源
            最近更新 更多