当前位置: 首页 > 面试题库 >

在使用流时创建排序集

谢同化
2023-03-14
问题内容

我有一个具有 名称,类型和年龄*User 类,然后这些用户的一长串就是我的输入。 *List<User> users = db.getUsers();

我试图以此为基础创建一组所有唯一用户,但是问题是我也希望根据 年龄 对他们进行排序。我目前使用过-

Set<User> set = users.stream().collect(Collectors.toSet());

如何同时对这个集合排序,有什么想法吗?


问题答案:

在非排序集中谈论顺序是没有意义的。TreeSet如果您想要按年龄排序的套装,则应该使用类似的方法。

Comparator<User> byAge = Comparator.comparingInt(User::getAge);

Supplier<TreeSet<User>> user = () -> new TreeSet<User>(byAge);

TreeSet<User> userSet = users.stream().collect(Collectors.toCollection(user));

如果上面的代码对您来说很丑陋,您也可以将当前的用户集添加到中TreeSet,但是还会有一个复制步骤。

使用a TreeSet和a
之间的主要区别在于LinkedHashSet维护排序顺序。使用TreeSet,在添加新用户时,将保持排序。使用LinkedHashSet,添加新用户可能会破坏按年龄排序的顺序,因为它LinkedHashSet仅保持插入顺序。

编辑:

根据以下@Federico的评论,TreeSet实际对象将使用其比较器来确定User对象的相等性。如果您想首先通过方法删除所有重复的用户equals(),那么我们可以先将所有用户添加到中HashSet,然后使用上述方法将其添加到中TreeSet

Set<User> set = new HashSet<>(users);   // remove duplicates via equals
TreeSet<User> userSet = set.stream().collect(Collectors.toCollection(user));


 类似资料:
  • 我对cassandra数据库中的数据排序有问题。这是我的桌子结构: 当我运行这个查询时,我得到了以下消息: 查询: 信息: 或者此查询返回没有排序的数据:

  • 我想创建一个从一个设备到一个节点服务器的实时音频流,然后可以将该实时提要广播到几个前端。 我已经为此进行了广泛的搜索,并且真的碰壁了,所以希望有人能帮忙。 我能够得到我的音频输入从API。 然后将流传递给函数,该函数使用API创建createMediaStreamSource` 在我的函数中,我现在有一个对象,我可以流式处理它。 目前,我通过套接字连接以流的形式发送音频事件,如下所示: 这是最好的

  • 我有以下课程 我正在尝试按贡献者名称和角色名称对ResourceContributor列表进行排序。到目前为止,我得到的是: 我试过使用thenComparing,但还不知道如何使用它。

  • 我已经使用Hibernate将Java对象映射到PostgreSQL数据库。UserDetails类是用来添加用户的实体类,它包含一个名为Address的嵌入对象。 userdetails.java 生成的SQL查询如下所示,它显示列的添加顺序与声明列的顺序不同。 在Hibernate中添加哪些列有什么规则吗?

  • 这个问题涵盖了如何使用FlinkSQL对乱序流进行排序,但我更愿意使用DataStream API。一种解决方案是使用ProcessFunction来执行此操作,该ProcessFunction使用PriorityQueue来缓冲事件,直到水印指示它们不再乱序,但这在RocksDB状态后端中表现不佳(问题是每次访问PriorityQueue都需要整个PriorityQueue的ser/de)。无论

  • 我知道这个字符(:)在我的陈述中毫无意义,但我想解释一下我想要什么。我想通过添加并使用对很多哈希图进行排序,但我做不到,因为我的值返回字符串。 这是我的代码: (我想排序这个hashMap,它有值,但返回字符串。)