我有一个具有 名称,类型和年龄* 的 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,它有值,但返回字符串。)