如何在java 8中为列表分配增量值
发布时间:2020-12-15 08:26:18 所属栏目:Java 来源:网络整理
导读:您假设有一个对象列表.该列表按该对象的一个??或多个字段排序.所以根据排序列表,我想用增量值设置该对象的字段. 为澄清,请注意以下示例: public class ObjectTest { int id; int userId; int code;} 如上所述,ObjectTest,任何用户都有自己的代码. 有一个Obj
您假设有一个对象列表.该列表按该对象的一个??或多个字段排序.所以根据排序列表,我想用增量值设置该对象的字段.
为澄清,请注意以下示例: public class ObjectTest { int id; int userId; int code; } 如上所述,ObjectTest,任何用户都有自己的代码. List<ObjectTest> objTests; 它排序: objTests.sort(Comparator.comparing(DataSet::getUserId).thenComparing(DataSet::getCode)); 因此,在按userId和代码排序之后,我想将值从1设置为任何用户拥有自己的代码.当userId更改时,增量值将再次重置为1. 如果有以下ObjectTest集合. id userId code -------------------------------- 100 5 200 6 100 7 200 9 200 10 100 2 在解释了上述场景之后,以下集合将是: id userId code 1 100 2 2 100 5 3 100 7 1 200 6 2 200 9 3 200 10 是否可以在java中使用lambda表达式 解决方法
有些事情应该有效:
List<ObjectTest> resultSet = objTests.stream() .sorted(Comparator.comparing(ObjectTest::getUserId).thenComparing(ObjectTest::getCode)) .collect(Collectors.groupingBy(ObjectTest::getUserId,LinkedHashMap::new,Collectors.toList())) .values() .stream() .map(e -> { IntStream.range(0,e.size()) .forEach(i -> e.get(i).setId(i + 1)); return e; }) .flatMap(Collection::stream) .collect(Collectors.toList()); 注意,我还没有编译这段代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |