当前位置: 首页 > 知识库问答 >
问题:

使用java stream filter[duplicate]按属性名筛选重复项

吕鹏
2023-03-14

我如何使用java流以相同的性能过滤一个对象?

HashSettasks包含:

task=1, name=hello
task=2, name=hello

现在,我要筛选任务来生成一个新的哈希集,它具有唯一的name-属性。

所有具有相同名称的对象都应被视为平等的对象:

tasks.stream.filter(???);

我可以通过创建一个新的列表并使用2个for循环来解决这个问题,方法是索引下一个元素并查找name(如果它已经放入列表中)。然而,也许有一个班轮这样的问题?可能使用stream.filter()

共有1个答案

唐景山
2023-03-14

您可以首先创建一个映射,使用任务名称作为键,使用相关任务作为值。只需使用mergefunction即可忽略重复任务。然后以set视图的形式获取所有不同的任务。

Set<Task> distinctTasks = tasks.stream().collect(Collectors.collectingAndThen(
    Collectors.toMap(Task::getName, Function.identity(), 
        (a, b) -> a), m -> new HashSet<>(m.values())));
 类似资料:
  • 我想通过作为字符串的属性名筛选类的集合。假设我有一个名为Person的类,我有它的一个集合,或者是IEnumerable或者是List,我想过滤这个集合,但是我不知道确切的过滤器,我的意思是我不能使用: 让我举一个例子。

  • 我还有这个包含ID列表: 我想筛选以便筛选的不包含id来自的对象,因此我尝试使用stream: 我找不到做这件事的正确函数。有人有什么建议让我试试吗?

  • 我需要在序列化时动态过滤bean属性。 不是我的选择。 假设我的Bean(作为Json符号): 我想使用以下属性编写 JSON: 预期的 JSON 结果为: 最后,我将在RestController中创建一个注释(),用于Spring,如下所示:

  • 我正在寻找一个干净的方式来完成这一点使用Es6,所以扩展操作符对我可用。

  • 问题内容: 基本上,我有一个表,其中的字段标识创建消息的用户。 当我显示两个用户之间的对话(一组消息)时,我希望能够通过来对消息进行分组,但要采用一种棘手的方式: 假设有一些消息(按排序): 我想按以下顺序获得3个消息组: 它应该按 user_id 分组,直到看到一个不同的分组,然后再按该分组。 我正在使用PostgreSQL,并且很乐意使用特定于它的东西,无论哪种都能提供最佳性能。 问题答案:

  • 我想过滤熊猫DataFrame,它从DataFrame中过滤掉除值中声明的行之外的所有其他列。我如何才能做到这一点并获得预期输出。 预期输出: