在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 對(duì)象排列問題

對(duì)象排列問題

項(xiàng)目任務(wù)是要處理一個(gè)田徑賽事的比賽結(jié)果。需要實(shí)現(xiàn)下面功能:
把某個(gè)比賽項(xiàng)目的成績從高到低結(jié)果排序并在前面加上名次。成績相同者名次相同,并按人名的字典(字母)順序排序)。

比如本來結(jié)果的列表ArrayList<Result>輸出如下:

成績 名字
7.00 Donald Li
6.00 Joan Chen
7.00 Alan Jiang
4.00 Tricia Zhang
7.00 Ada Wang
6.00 William Sf

方法應(yīng)該達(dá)到的理想效果如下
1 7.00 Ada Wang
1 7.00 Alan Jiang
1 7.00 Donald Li
4 6.00 Joan Chen
4 6.00 William Sf
6 4.00 Tricia Zhang

本人菜鳥,試了很多種方法都排不對(duì),請能者大神不吝賜教指點(diǎn)迷津,非常感謝!

回答
編輯回答
不歸路

`var arrayList = [{grade:7.00,name:'Donald Li'},
{grade:6.00,name:'Joan Chen'},
{grade:7.00,name:'Alan Jiang'},
{grade:4.00,name:'Tricia Zhang'},
{grade:7.00,name:'Ada Wang'},
{grade:6.00,name:'William Sf'}]

  function compare(propertyName) {
    return function(object1, object2) {
      var value1 = object1[propertyName];
      var value2 = object2[propertyName];
      if (value2 < value1) {
        return 1;
      } else if (value2 > value1) {
        return -1;
      } else {
        return 0;
      }
    }
  }
  arrayList.sort(compare("name"));`  
2017年10月12日 13:19
編輯回答
兮顏

Collections.sort(list, comparator) 進(jìn)行排序
在覆寫的sort方法中,先判斷分?jǐn)?shù)是否相同,如果相同則使用 for 循環(huán)遍歷兩個(gè)人名的每個(gè)位置上的字符直到某個(gè)位置上的字符有大小關(guān)系;如果不相同則直接返回成績的大小關(guān)系。

2017年12月23日 01:08
編輯回答
情已空

非常感謝回復(fù)!

現(xiàn)在我已經(jīng)把結(jié)果列表按成績高低和名字字母順序排列好了,結(jié)果列表現(xiàn)在是resultList:

7.00 Ada Wang
7.00 Alan Jiang
7.00 Donald Li
6.00 Joan Chen
6.00 William Sf
4.00 Tricia Zhang

下面開始往結(jié)果前面加名次

int[] rank=new int[resultList.size()] ;
rank[0]=1;
for(int i=1; i<resultList.size();i++)

{if(resultList.get(i).getResultValue()==resultList.get(i-1).getResultValue())

{rank[i]=rank[i-1];}
else
{rank[i]=i+1;}

}

for(int i=0; i<resultList.size();i++) {
System.out.println(rank[i]+" "+resultList.get(i).getResultValue()+" "+resultList.get(i).getParticipant().getName()+" "+resultList.get(i).getParticipant().getTeam());
}

打印結(jié)果居然是:

1 7.00 Ada Wang
2 7.00 Alan Jiang
3 7.00 Donald Li
4 6.00 Joan Chen
5 6.00 William Sf
6 4.00 Tricia Zhang

很奇怪。當(dāng)兩項(xiàng)結(jié)果值相同時(shí),怎么沒有執(zhí)行if結(jié)果把rank變?yōu)橄嗤?

2017年2月12日 10:16
編輯回答
風(fēng)畔

題注想要的是這種效果嗎?

public class Order {

    @Test
    public  void test() {
        List<Result> list = new ArrayList<>();
        list.add(new Order.Result(7.00, "Donald Li"));
        list.add(new Order.Result(6.00, "Joan Chen"));
        list.add(new Order.Result(7.00, "Alan Jiang"));
        list.add(new Order.Result(4.00, "Tricia Zhang"));
        list.add(new Order.Result(7.00, "Ada Wang"));
        list.add(new Order.Result(6.00, "William Sf"));

        Collections.sort(list);
                List<Result> list = Arrays.asList(
                new Result(6.00, "Joan Chen"),
                new Result(7.00, "Alan Jiang"),
                new Result(4.00, "Tricia Zhang"),
                new Result(7.00, "Ada Wang"),
                new Result(6.00, "William Sf"),
                new Result(6.00, "Will Sf"),
                new Result(1.00, "William PJ")
        );
        
        Collections.sort(list);
        double preNum = 0;
        for(int i = 0, count = 1,size = list.size();i < size;i++) {
            Result result = list.get(i);
            if(result.number != preNum) {
                count = i + 1;
                preNum = result.number;
            }
            System.out.println(count + ":" + result);
        }
    }

    public class Result implements Comparable<Result> {
        private Double number;
        private String name;

        public Result(Double number, String name) {
            this.number = number;
            this.name = name;
        }

        @Override
        public int compareTo(Result o) {
            int result = number.compareTo(o.number);

            if(result == 0) {
                result = -name.compareTo(o.name);
            }

            return -result;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("Result{");
            sb.append("number=").append(number);
            sb.append(", name='").append(name).append('\'');
            sb.append('}');
            return sb.toString();
        }
    }
}
2018年5月2日 23:10
編輯回答
雅痞
public class Result {

    private Integer rank;

    private Double score;

    private String name;


    public Result(Double score, String name) {
        this.score = score;
        this.name = name;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getRank() {
        return rank;
    }

    public void setRank(Integer rank) {
        this.rank = rank;
    }

    @Override
    public String toString() {
        return "Result{" +
                "rank=" + rank +
                ", score=" + score +
                ", name='" + name + '\'' +
                '}';
    }
}
@Test
    public void testSortedScoreJ8_1(){

        List<Result> results = Arrays.asList(
                new Result(7.00, "Donald Li"),
                new Result(6.00, "Joan Chen"),
                new Result(7.00, "Alan Jiang"),
                new Result(4.00, "Tricia Zhang"),
                new Result(7.00, "Ada Wang "),
                new Result(6.00, "William Sf")
        );

        // 根據(jù)分?jǐn)?shù)進(jìn)行分組并使用TreeMap進(jìn)行排序,然后得到逆序視圖
        NavigableMap<Double, List<Result>> navigableMap = results
                .stream()
                .collect(Collectors.groupingBy(Result::getScore, TreeMap::new, Collectors.toList()))
                .descendingMap();

        ArrayList<Result> rankList = new ArrayList<>(results.size());
        int rank = 1;

        for (Map.Entry<Double, List<Result>> entry : navigableMap.entrySet()) {

            // 根據(jù)名稱進(jìn)行排序并將設(shè)置排名
            int finalRank = rank;
            List<Result> resultList = entry.getValue().
                    stream()
                    .sorted(Comparator.comparing(Result::getName))
                    .peek(r -> r.setRank(finalRank))
                    .collect(Collectors.toList());

            rankList.addAll(resultList);

            rank += entry.getValue().size();
        }

        rankList.forEach(System.out::println);
    }

    @Test
    public void testSortedScoreJ8_2(){
        List<Result> results = Arrays.asList(
                new Result(7.00, "Donald Li"),
                new Result(6.00, "Joan Chen"),
                new Result(7.00, "Alan Jiang"),
                new Result(4.00, "Tricia Zhang"),
                new Result(7.00, "Ada Wang "),
                new Result(6.00, "William Sf")
        );

        // 把列表排序
        results.sort((s1,s2)->{
            // 分?jǐn)?shù)從高到低
            int compareTo = s2.getScore().compareTo(s1.getScore());
            if(compareTo == 0){
                // 姓名從A到Z
                return s1.getName().compareTo(s2.getName());
            }
            return compareTo;
        });

        // 把分?jǐn)?shù)從高到低進(jìn)行排序
        List<Double> sortedScore = results
                .stream()
                .map(Result::getScore)
                .sorted(Comparator.reverseOrder())
                .collect(Collectors.toList());

        // 計(jì)算得到該分?jǐn)?shù)的應(yīng)該是第幾名
        for (Result result : results) {
            result.setRank(sortedScore.indexOf(result.getScore())+1);
        }

        results.forEach(System.out::println);
    }

結(jié)果

Result{rank=1, score=7.0, name='Ada Wang '}
Result{rank=1, score=7.0, name='Alan Jiang'}
Result{rank=1, score=7.0, name='Donald Li'}
Result{rank=4, score=6.0, name='Joan Chen'}
Result{rank=4, score=6.0, name='William Sf'}
Result{rank=6, score=4.0, name='Tricia Zhang'}
2018年6月7日 10:36