項(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"));` 非常感謝回復(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)橄嗤?
題注想要的是這種效果嗎?
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();
}
}
}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'}北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。