因业务需要,要在Set中插入有序的字段。Set不能用下标遍历,因此将Set转为List后,遍历插入数据。
//查询的set
Set<UserRankInfo> userRankInfos = rankService.listWeekRank();
//转为list
List<UserRankInfo> collect = userRankInfos.stream().map(e -> {
//do something
}).collect(Collectors.toList());
//遍历插入
for (int i = 0; i < collect.size(); i++) {
RankRewardsRuleDao rankRewardsRuleDao = rankRewardsRuleMapper.getRuleByType("1");
try {
Class<?> clazz = rankRewardsRuleDao.getClass();
Field[] fs = clazz.getDeclaredFields();
Field field = fs[i+3];
field.setAccessible(true);
Object obj = field.get(rankRewardsRuleDao);
collect.get(i).setReward("¥ "+obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
但是如果将List转为Set的话 会导致排序错误。因此需要使用排序。
result.stream().sorted(Comparator.comparing(UserRankInfo::getYieldRate).reversed());