加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在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,任何用户都有自己的代码.
有一个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());

注意,我还没有编译这段代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读