一尘不染

如何使用多个排序条件对ArrayList进行排序?

java

我有一个包含Quote对象的数组列表。我希望能够按名称,更改和更改百分比的字母顺序进行排序。如何排序我的数组列表?

package org.stocktwits.model;

import java.io.Serializable;
import java.text.DecimalFormat;

    public class Quote implements Serializable {

        private static final long serialVersionUID = 1L;

        public String symbol;
        public String name;
        public String change;
        public String percentChange;
        public String open;
        public String daysHigh;
        public String daysLow;
        public String dividendYield;
        public String volume;
        public String averageDailyVolume;
        public String peRatio;
        public String marketCapitalization;
        public String yearHigh;
        public String yearLow;
        public String lastTradePriceOnly;
        public DecimalFormat df = new DecimalFormat("#,###,###,###,###,##0.00");
        public DecimalFormat vf = new DecimalFormat("#,###,###,###,###,##0");

        public String getSymbol() {
            return symbol;
        }
        public void setSymbol(String symbol) {
            this.symbol = symbol;
        }
        public String getName() {
            return name;
        }

阅读 745

收藏
2020-03-20

共2个答案

一尘不染

创建一个合适的对象Comparator,它将根据你所需的条件比较两个项目。然后Collections.sort()在你的ArrayList上使用 。

如果以后要按其他条件排序,请Collections.sort()使用不同的再次调用Comparator

2020-03-20
一尘不染

如果你(几乎)总是想要使用该顺序,则可以将Comparable接口添加到Quote并实现compareTo方法。

 public int compareTo(Quote quote) {
     int result = this.getName().compareTo(quote.getName());
     if (result == 0) {
        result = this.getChange().compareTo(quote.getChange());
     }
     if (result == 0) {
        result = this.getPercentChange().compareTo(quote.getPercentChange());
     }
     return result;
 }

然后使用排序的集合或列表进行排序,引号将被排序。

对于临时排序,最好使用单独的(可能是匿名的)Comparator。

2020-03-20