50,544
社区成员
发帖
与我相关
我的任务
分享
public class JBScore extends LitePalSupport {
private int id;
private String icd;
private String jbname;
private String sscode;
private String ssname;
private int sscount;
private int score;
public int getId(){return id;}
public void setId(int id){this.id=id;}
public String getICD(){return icd;}
public void setICD(String icd){this.icd=icd;}
public String getJbname(){return jbname;}
public void setJbname(String jbname){this.jbname=jbname;}
public String getSSCode(){return sscode;}
public void seSSCode(String sscode){this.sscode=sscode;}
public String getSSName(){return ssname;}
public void setSSName(String ssname){this.ssname=ssname;}
public int getSSCount(){return sscount;}
public void setSSCount(int sscount){this.sscount=sscount;}
public int getScore(){return score;}
public void setScore(int score){this.score=score;}
}
jbList.sort(new Comparator<JBScore>() {
@Override
public int compare(JBScore jbScore, JBScore t1) {
//如果icd相同
if(jbScore.getICD()==t1.getICD()){
//先比较sscount
if (jbScore.getSSCount()>t1.getSSCount()){return 1;}//sscount大的排前面
if (jbScore.getSSCount()<t1.getSSCount()){return -1;}//sscount小的排 后面
if (jbScore.getSSCount()==t1.getSSCount()){
//sscount相同时比较score
if (jbScore.getScore()>t1.getScore()){ return 1; }
else if (jbScore.getScore()==t1.getScore()){ return 0; }
else { return -1; }
}
}
else {
//如果icd不同则先对比score
if (jbScore.getScore()>t1.getScore()){return 1;}
else if (jbScore.getScore()<t1.getScore()){return -1;}
else {
//score相同则对比sscount
if (jbScore.getSSCount()>t1.getSSCount()){return 1;}
else if (jbScore.getSSCount()<t1.getSSCount()){return -1;}
else {return jbScore.getICD().compareTo(t1.getICD());}
}
}
return 0;
}
});
List<List<JBScore>> groups = list.stream()
.collect(Collectors.groupingBy(JBScore::getIcd))
.values().parallelStream()
.map(l -> {
return l.stream().sorted(
Comparator
.comparing(JBScore::getSscount, Comparator.reverseOrder())
.thenComparing(JBScore::getScore, Comparator.reverseOrder())
).collect(Collectors.toList());
})
.collect(Collectors.toList());
@Test
@SuppressWarnings("unchecked")
public void testCmp() {
JBScore score1 = new JBScore(1, "a", 2, 20);
JBScore score2 = new JBScore(2, "a", 1, 20);
JBScore score3 = new JBScore(3, "a", 2, 30);//a组第一个元素
JBScore score4 = new JBScore(4, "b", 2, 10);
JBScore score5 = new JBScore(5, "b", 3, 10);//b组第一个元素
JBScore score6 = new JBScore(6, "b", 2, 20);
JBScore score7 = new JBScore(7, "c", 3, 30);//c组第一个元素
JBScore score8 = new JBScore(8, "c", 3, 20);
JBScore score9 = new JBScore(9, "c", 1, 30);
//最终c a b -> (7 8 9) (3 1 2) (5 6 4)
List<JBScore> list = Arrays.asList(new JBScore[] { score1, score2, score3, score4, score5, score6, score7, score8, score9});
List<List<JBScore>> groups = new ArrayList<>();
list.parallelStream()
.collect(Collectors.groupingBy(JBScore::getIcd))
.values().parallelStream()
.forEach(l -> {
groups.add(l.stream().sorted(
Comparator
.comparing(JBScore::getSscount, Comparator.reverseOrder())
.thenComparing(JBScore::getScore, Comparator.reverseOrder())
).collect(Collectors.toList()));
});
List<JBScore> result = groups.stream()
.sorted(
Comparator
.comparing(t -> ((List<JBScore>) t).get(0).getScore(), Comparator.reverseOrder())
.thenComparing(t -> ((List<JBScore>) t).get(0).getSscount(), Comparator.reverseOrder())
)
.flatMap(List::stream)
.collect(Collectors.toList());
for (JBScore jbScore : result) {
System.err.println(jbScore);
}
}
import java.util.Comparator;
public class JBComparator implements Comparator<JBScore> {
@Override
public int compare(JBScore o1, JBScore o2) {
if (o1.getSSCount()>o2.getSSCount()){return -1;}//sscount大的排前面
if (o1.getSSCount()<o2.getSSCount()){return 1;}//sscount小的排 后面
if (o1.getSSCount()==o2.getSSCount()){
//sscount相同时比较score
if (o1.getScore()>o2.getScore()){ return -1; }
else if (o1.getScore()==o2.getScore()){ return 0; }
else { return 1; }
}
return 0;
}
}
import java.util.Comparator;
import java.util.List;
public class JBListComparator implements Comparator<List<JBScore>> {
@Override
public int compare(List<JBScore> o1, List<JBScore> o2) {
JBScore jbScore1 = o1.get(0);
JBScore jbScore2 = o2.get(0);
//如果icd不同则先对比score
if (jbScore1.getScore()>jbScore2.getScore()){return -1;}
else if (jbScore1.getScore()<jbScore2.getScore()){return 1;}
else {
//score相同则对比sscount
if (jbScore1.getSSCount()>jbScore2.getSSCount()){return -1;}
else if (jbScore1.getSSCount()<jbScore2.getSSCount()){return 1;}
else {return jbScore1.getICD().compareTo(jbScore2.getICD());}
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static List<JBScore> sortJB(List<JBScore> list){
List<List<JBScore>> lists = new ArrayList<>();
List<String> stringList = new ArrayList<>();
for(JBScore jbScore:list){
if(!stringList.contains(jbScore.getICD()))
stringList.add(jbScore.getICD());
}
for(int i=0;i<stringList.size();i++){
List<JBScore> jbScoreList = new ArrayList<>();
for(JBScore jbScore:list){
if(jbScore.getICD().equals(stringList.get(i)))
jbScoreList.add(jbScore);
}
Collections.sort(jbScoreList,new JBComparator());
lists.add(jbScoreList);
}
Collections.sort(lists,new JBListComparator());
List<JBScore> result = new ArrayList<>();
for(List<JBScore> list1:lists){
for(JBScore jbScore:list1){
result.add(jbScore);
}
}
return result;
}
public static void main(String[] args){
JBScore jbScore1 = new JBScore();
jbScore1.setId(1);
jbScore1.setICD("a");
jbScore1.setSSCount(2);
jbScore1.setScore(10);
JBScore jbScore2 = new JBScore();
jbScore2.setId(2);
jbScore2.setICD("a");
jbScore2.setSSCount(1);
jbScore2.setScore(30);
JBScore jbScore3 = new JBScore();
jbScore3.setId(3);
jbScore3.setICD("b");
jbScore3.setSSCount(1);
jbScore3.setScore(20);
// JBScore jbScore4 = new JBScore();
// jbScore4.setId(4);
// jbScore4.setICD("b");
// jbScore4.setSSCount(2);
// jbScore4.setScore(10);
List<JBScore> list = new ArrayList<>();
list.add(jbScore1);
list.add(jbScore2);
list.add(jbScore3);
//list.add(jbScore4);
for(JBScore jbScore:list){
System.out.print(jbScore.getId()+" ");
}
System.out.println();
System.out.println("排序后");
List<JBScore> list1 = sortJB(list);
for(JBScore jbScore:list1){
System.out.print(jbScore.getId()+" ");
}
System.out.println();
}
}