Java8的List流式语法按指定规则排序,多字段排序
北京火车票放票时间
Java8的List流式语法按指定规则排序,多字段排序
举个栗⼦:以下是⼀个同学LoL职业选⼿表现涨幅信息对象,其中deviation为涨幅可正可负,需求是要求表现波动最⼤的⼗名选⼿的信
息,并按波动和年龄排序,(即波动最⼤的且年龄最⼤的选⼿我们就发警告函,让其退役,哈哈哈)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo{
private String name;
private String birthday;//为了⽅便测试⽤字符串表⽰了
生成两种沉淀的复分解反应private Integer age;
private Double deviation;
}
import org.junit.Test;
如何给电脑设置开机密码import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class UserInfoTest {
美容店名@Test
public void sortTest() {
ArrayList<UserInfo> userInfoList = new ArrayList<>();
房间熏艾条的正确方法
for (int i = 10; i < 30; i++) {
userInfoList.add(new UserInfo("⼩明" + i, "2019-11-" + (30 - i), 30 - i, Double.parseDouble(20 - i + "")));
}
List<UserInfo> collect = userInfoList.stream().sorted(Comparatorparing(a -> Double.valueOf(Math.Deviation())))).List());        verse(collect);
System.out.println("按波动情况绝对值排序完:");
// collect.stream().forEach(System.out::println);
List<UserInfo> collect1 = collect.stream().sorted(Comparatorparing(UserInfo::getAge).reversed()).List());
System.out.println("按年龄排序完:");
// collect1.stream().forEach(System.out::println);
//⽆特殊规则,多字段排序
System.out.println("⽆特殊规则多字段排序:");
List<UserInfo> collect2 = userInfoList.stream().sorted(Comparatorparing(UserInfo::getAge).reversed().thenComparing(UserInfo::getBirthday)).collect(C        collect2.stream().forEach(System.out::println);
}
}
以上程序输出结果如下:可以看到第⼀步将选⼿的波动绝对值进⾏排序(注意默认排序是升序,我们需要翻转),然后再将按年龄排序就得
到了我们想要的顺序了。
还有⼀点值得注意:当我们使⽤流式语法进⾏排序时,如果没有特殊的排序规则(即需要对字段进⾏操作,以上求绝对值就是⼀种额外的操
作),可以⼀直使⽤.thenComparing()来进⾏多字段排序。
按波动情况绝对值排序完:
UserInfo(name=⼩明10, birthday=2019-11-20, age=20, deviation=10.0) UserInfo(name=⼩明29, birthday=2019-11-1, age=1, deviation=-9.0) UserInfo(name=⼩明11, birthday=2019-11-19, age=19, deviation=9.0) UserInfo(name=⼩明28, birthday=2019-11-2, age=2, deviation=-8.0) UserInfo(name=⼩明12, birthday=2019-11-18, age=18, deviation=8.0) UserInfo(name=⼩明27, birthday=2019-11-3, age=3, deviation=-7.0) UserInfo(name=⼩明13, birthday=2019-11-17, age=17, deviation=7.0) UserInfo(name=⼩明26, birthday=2019-11-4, age=4, deviation=-6.0) UserInfo(name=⼩明14, birthday=2019-11-16, age=16, deviation=6.0) UserInfo(name=⼩明25, birthday=2019-11-5, age=5, deviation=-5.0) UserInfo(name=⼩明15, birthday=2019-11-15, age=15, deviation=5.0) UserInfo(name=⼩明24, birthday=2019-11-6, age=6, deviation=-4.0) UserInfo(name=⼩明16, birthday=2019-11-14, age=14, deviation=4.0) UserInfo(name=⼩明23, birthday=2019-11-7, age=7, deviation=-3.0) UserInfo(name=⼩明17, birthday=2019-11-13, age=13, deviation=3.0) UserInfo(name=⼩明22, birthday=2019-11-8, age=8, deviation=-2.0) UserInfo(name=⼩明18, birthday=2019-11-12, age=12, deviation=2.0) UserInfo(name=⼩明21, birthday=2019-11-9, age=9, deviation=-1.0) UserInfo(name=⼩明19, birthday=2019-11-11, age=11, deviation=1.0) UserInfo(name=⼩明20, birthday=2019-11-10, age=10, deviation=0.0)按年龄排序完:
电视台实习报告
UserInfo(name=⼩明10, birthday=2019-11-20, age=20, deviation=10.0) UserInfo(name=⼩明11, birthday=2019-11-19, age=19, deviation=9.0) UserInfo(name=⼩明12, birthday=2019-11-18, age=18, deviation=8.0) UserInfo(name=⼩明13, birthday=2019-11-17, age=17, deviation=7.0) UserInfo(name=⼩明14, birthday=2019-11-16, age=16, deviation=6.0) UserInfo(name=⼩明15, birthday=2019-11-15, age=15, deviation=5.0) UserInfo(name=⼩明16, birthday=2019-11-14, age=14, deviation=4.0) UserInfo(name=⼩明17, birthday=2019-11-13, age=13, deviation=3.0) UserInfo(name=⼩明18, birthday=2019-11-12, age=12, deviation=2.0) UserInfo(name=⼩明19, birthday=2019-11-11, age=11, deviation=1.0) UserInfo(name=⼩明20, birthday=2019-11-10, age=10, deviation=0.0) UserInfo(name=⼩明21, birthday=2019-11-9, age=9, deviation=-1.0) UserInfo(name=⼩明22, birthday=2019-11-8, age=8, deviation=-2.0) UserInfo(name=⼩明23, birthday=2019-11-7, age=7, deviation=-3.0) UserInfo(name=⼩明24, birthday=2019-11-6, age=6, deviation=-4.0) UserInfo(name=⼩明25, birthday=2019-11-5, age=5, deviation=-5.0) UserInfo(name=⼩明26, birthday=2019-11-4, age=4, deviation=-6.0) UserInfo(name=⼩明27, birthday=2019-11-3, age=3, deviation=-7.0) UserInfo(name=⼩明28, birthday=2019-11-2, age=2, deviation=-8.0) UserInfo(name=⼩明29, birthday=2019-11-1, age=1, deviation=-9.0)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。