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

获取在 Java 中首次出现属性值的对象列表 [重复]

堵鸿光
2023-03-14

目前我有这个输入结果对象列表

public class Result{
private String id;
private String callerId;

}

这样地:

输入:

result1 ( id=1, callerId= A)
result2 ( id=2, callerId= A)
result3 ( id=3, callerId= B)
result4 ( id=4, callerId= C)
result5 ( id=5, callerId= A)

现在我想创建一个新列表,如果列表中的另一个结果具有重复的调用方 Id,则仅采用具有该调用方 Id 的第一个结果。例如:

输出:

result1 ( id=1, callerId= A)
result3 ( id=3, callerId= B)
result4 ( id=4, callerId= C)

我已经使它的工作使用如下图

resultsSet是列表;

Set<String> uniqueCaller = new HashSet<>();

resultsSet.forEach(
                results -> {
                    uniqueCaller.add(results.getCallerReference());
                }
        );


Map<String, Integer> idWithAppearanceCount = new HashMap<>();
        for(var caller : uniqueCaller) {
            int appearanceCount = 0;
            System.out.println("Start loop result");
            for(var result : resultsSet){
                if(result.getCallerReference().equalsIgnoreCase(caller)){
                    idWithAppearanceCount.put(result.getId(), appearanceCount++);
                    System.out.println("Appearance count" +appearanceCount);
                    System.out.println(idWithAppearanceCount);
                }
            }
        }

        
idWithAppearanceCount.entrySet().removeIf( item -> item.getValue() > 0
        );

但是我想知道用Java来做是否是更好的方法

共有1个答案

夹谷岳
2023-03-14

你可以使用地图并做这样的事情。

Collection<Result> filterUnique(Collection<Result> collection) {
    Map<String, Result> map = new HashMap<>();
    for (Result result : collection) {
        map.put(result.callerId, result);
    }
    return map.values();
}

请注意,这可能会更改订单。

 类似资料:
  • 问题内容: 当存在时,是否有可能获得全部列表?是否为此准备了电话,还是我必须编写一个foreach循环,如: 问题答案: Java 8及更高版本: 如果需要确保得到结果,则必须将最后一行更改为: Java 7及以下版本: Java 8之前的标准集合API不支持这种转换。您必须编写一个循环(或将其包装在您自己的“地图”函数中),除非您使用一些更高级的集合API /扩展。 (您的Java代码段中的行正

  • 我有一份包含订单项目列表的订单 如果在这个列表中我有以下项目 我想计算订单所有者名称相同的值之和。 e、 g.如果所有者名称为“John”,则返回417.00,如果名称为“Doe”,则返回19.00。 我怎么能通过小溪Java呢?非常感谢

  • 我想通过对象在Java中的属性来获取列表中对象的索引。 例: 现在,我想获取一个名为“Girish”的对象的索引。请务必让我知道JAVA中的代码。

  • 我的查询对象是 但是 <代码>列表 将结果列表转换为classNameList。当我迭代单个值时,我的实体值在ClassName属性中为空。调用getter方法时不显示值。我的pojo看起来如下所示,当我打印pojo的值为空时,我的foreach正好迭代四次。 我的查询对象来自com.google.cloud.firestore包。和ApiFuture来自com.google.api.core.A

  • 我有一个对象类型的列表。因为我有一个字符串属性idNum。现在我想通过传递idNum来获取列表中对象的索引。 我不知道如何给出对象列表。indexOf(//不知道如何在这里给出) 是否可以在不迭代列表的情况下这样做。我只想使用方法。

  • 问题内容: 基本上,我有一个带有的表单,用于选择要使用的数据集(值分别为“ m”,“ f”和“ c”)。然后,我有一个字典/对象,其数据位于: 现在我需要/ / 但我不知道如何使用语法-我已经试过: 什么是正确的语法/方法? 问题答案: 由于您是通过变量引用属性,因此需要使用括号表示法。 …这与您传递字符串时使用的表示法相同。