【问题标题】:How to convert String to int and compare it by using Comparator如何将 String 转换为 int 并使用 Comparator 进行比较
【发布时间】:2017-01-10 06:06:34
【问题描述】:

这就是我比较 2 个字符串值的方式,值是数字,它工作得非常好,直到它收到一个等于或大于 10 的值。

所以我需要将这些值转换为整数。

TXCartData 类有String rowID

这就是我正在做的。

Collections.sort(data, new Comparator<TXCartData>() {
    @Override
    public int compare(TXCartData lhs, TXCartData rhs) {
        return lhs.rowId.compareToIgnoreCase(rhs.rowId);
    }
});

我试图将 rowID 更改为整数,但它给了我一条错误消息,因为它期望输出为 0 或 1,而 1==1 返回 true of false

这是我尝试过的。

Collections.sort(data, new Comparator<TXCartData>() {
    @Override
    public int compare(TXCartData lhs, TXCartData rhs) {
        return Integer.parseInt(lhs.rowId)== Integer.parseInt(rhs.rowId);
    }
});

数据列表很大,我用Comparator排序了3次,结果准确,前2个是字符串,排序准确,但最后一个失败了。

【问题讨论】:

  • 你的字符串是否只包含整数?
  • @KarandeepAtwal ,是的,rowID 将始终包含 int,但我无法在班级级别更改它,我需要将其转换为 int
  • 你想对arraylist进行排序吗?
  • var rowIdInt = Integer.parseInt(rowID);试试吧
  • @VishalPatoliyaツ 是的,这是一个数组列表,但包含不同类型的数据,我首先需要按部分对它进行排序,即字符串,然后是行,然后是座位。前 2 个工作正常。

标签: java android arrays spring arraylist


【解决方案1】:

请试试这个

 Collections.sort(data, new Comparator<TXCartData>() {
        @Override
        public int compare(TXCartData lhs, TXCartData rhs) {
            int n1=Integer.parseInt(lhs.rowId);
            int n2=Integer.parseInt(rhs.rowId);
            if (n1>=n2){
                return 1;
            }
            return -1;
        }
    });

【讨论】:

    【解决方案2】:

    具有自然排序顺序的类(例如 Number 类)应实现 Comparable 接口,而没有自然排序顺序的类(例如 Chair 类)应提供 Comparator(或一个匿名的 Comparator 类)。

    public class Number implements Comparable<Number> {
        private int value;
    
        public Number(int value) { this.value = value; }
        public int compareTo(Number anotherInstance) {
            return this.value - anotherInstance.value;
        }
    }
    
    public class Chair {
        private int weight;
        private int height;
    
        public Chair(int weight, int height) {
            this.weight = weight;
            this.height = height;
        }
        /* Omitting getters and setters */
    }
    class ChairWeightComparator implements Comparator<Chair> {
        public int compare(Chair chair1, Chair chair2) {
            return chair1.getWeight() - chair2.getWeight();
        }
    }
    class ChairHeightComparator implements Comparator<Chair> {
        public int compare(Chair chair1, Chair chair2) {
            return chair1.getHeight() - chair2.getHeight();
        }
    }
    

    用法:

    List<Number> numbers = new ArrayList<Number>();
    ...
    Collections.sort(numbers);
    
    List<Chair> chairs = new ArrayList<Chair>();
    // Sort by weight:
    Collections.sort(chairs, new ChairWeightComparator());
    // Sort by height:
    Collections.sort(chairs, new ChairHeightComparator());
    
    // You can also create anonymous comparators;
    // Sort by color:
    Collections.sort(chairs, new Comparator<Chair>() {
        public int compare(Chair chair1, Chair chair2) {
            ...
        }
    });
    

    【讨论】:

      【解决方案3】:

      更改比较函数的 return 类型

      public boolean compare(TXCartData lhs, TXCartData rhs) {
              return Integer.parseInt(lhs.rowId)== Integer.parseInt(rhs.rowId);
          }
      

      【讨论】:

      • 这给了我错误信息,并强制将boolean 转换为int
      • 这是默认功能还是您的功能?如果它是你的,那么在基类中更改它。
      【解决方案4】:

      只需在代码中将 '==' 更改为 '-' 即可。这将工作...

      Collections.sort(data, new Comparator<TXCartData>() {
              @Override
              public int compare(TXCartData lhs, TXCartData rhs) {
              return Integer.parseInt(lhs.rowId)- Integer.parseInt(rhs.rowId);
          }
      });
      

      【讨论】:

        【解决方案5】:

        尝试使用:

        Integer.compare(int,int) and Integer.lowestOneBit(int)
        
        int result = Integer.lowestOneBit(Integer.compare(Integer.parseInt(number1), Integer.parseInt(number2)));
        

        【讨论】:

          【解决方案6】:

          要按照 lhs.rowId 的降序顺序排序,代码如下

          Collections.sort(data, new Comparator<TXCartData>() {
                  @Override
                  public int compare(TXCartData lhs, TXCartData rhs) {
                  return Integer.parseInt(lhs.rowId) - Integer.parseInt(rhs.rowId);
              }
          });
          

          对于升序的订单返回语句可以改成下面,

          return Integer.parseInt(rhs.rowId) - Integer.parseInt(lhs.rowId);
          

          【讨论】:

            猜你喜欢
            • 2021-04-29
            • 2019-02-19
            • 2012-02-27
            • 2023-03-30
            • 2015-03-21
            • 2020-09-28
            • 2010-11-04
            • 1970-01-01
            • 2023-04-03
            相关资源
            最近更新 更多