【问题标题】:Exact one matching value in list of object where object consist 4 properties对象包含 4 个属性的对象列表中的精确一个匹配值
【发布时间】:2017-09-02 12:44:14
【问题描述】:

我有我的类对象 (EmployerDetails) 的列表。雇主详细信息包含 4 个参数。列表可能包含具有不同参数的所有对象,或者该列表中的多个对象的参数可能相同。 我的班级是这样的:

    public class EmployerDetails {

    private String employerId;
    private String occupationCode;
    private String SchemeCategory;
    private String switchingFlag;
}

我已经使用 ArrayList 来检索对象。

假设我有一个包含 10 个雇主对象的列表,其数据集如下:

所有 10 个对象的雇主 ID 相同。

OccupationCode 4 个对象相同,5 个对象不同,1 个对象为 null。

SchemeCategory 9 个对象不同,1 个对象为 null。

switchingFlag 可以是 Y 或 N。

现在我的问题是,我有一个 occupationCode 和一个 schemeCategory,我必须检索满足我的条件的对象,条件是:具有相同的记录雇主ID(上面的例子是10),我必须检索与我的职业代码匹配的记录,并且应该只有一个匹配。例如,如果我的 OccupationCode 与 4 个对象匹配,我将跳过此条件并继续条件 2,即:我将检索占用代码不为空且 schemeCategory 与我的 schemeCategory 匹配的记录。又是第三个条件。

目前我正在使用每个循环迭代列表,在条件 1 中,如果对象的职业代码与我的职业代码匹配,它将进入 if 条件。在上面的示例中,它将执行 4 次,但在迭代时,我必须仅在有一个匹配项时才检索记录。

我可以使用计数器并将对象放在 HashMap 中,如果 count ==1,则在 for 循环完成后检索对象,但这里的问题是,我有 4 个这样的条件,我必须为所有条件和之后编写 for 循环迭代,如果没有结果,那么我必须再次迭代条件 2,依此类推。

这样的问题有解决办法吗?我正在使用 Java 7,但无法使用 Java 8。

谢谢。

【问题讨论】:

  • 这样的问题有什么解决办法吗? 是的,可能有。您的实际问题是什么?
  • 这样做的最短方法是什么?根据我的逻辑,我必须对所有条件使用 for 循环。
  • 没有办法避免循环,如果这是你的问题。您如何将您拥有的代码发布到 codereview.stackexchange.com,而不是要求我们为您提供代码?
  • Code Review 上发布代码之前,请确保它实际上是on-topic
  • 嗨 Nizet,我现在没有确切的代码,但我已经输入了示例代码。 codereview.stackexchange.com/questions/174647/…

标签: java list collections java-7


【解决方案1】:

我可以想到 2 个解决方案 假设你有这些信息来匹配employerId、occupationCode、SchemeCategory 和switchingFlag ->

解决方案 1: 通过连接所有这 4 个值来形成一个字符串 - 让我们称之为 expectedAggregateString。在 EmployerDetails 类中添加此方法

private String getAggregatedStringVal() {
        StringBuilder str = new StringBuilder(employerId);
        str.append(occupationCode);
        str.append(SchemeCategory);
        str.append(switchingFlag);
        return str.toString();
    }

在单个循环中,遍历列表并将 expectedAggregateString 与每个循环对象的 getAggregatedStringVal 方法进行比较。 第一场比赛 - 打破循环。

解决方案 2: 创建一个预期的 EmployerDetails 对象而不是字符串,因为根据我的假设,您拥有 EmployerDetails obj 所需的所有 4 个值。 在 EmployerDetails 类中生成 equals() 和 hashcode() 方法,并在单个循环中将循环中的每个对象与预期的 EmployerDetails 对象进行比较。第一场比赛 - 打破循环。

【讨论】:

  • 我的要求是,我必须将职业代码与列表对象中的职业代码匹配,如果没有匹配或不止一个匹配,那么我必须检查第二个条件,如果没有匹配那么我必须检查第三个条件等等。我认为提供的解决方案是不可能的。请参考代码:codereview.stackexchange.com/questions/174647/…
  • 如果只有一个条件,您提供的解决方案将有效,但我必须检查 3 个以上的条件,并且我必须只检查该顺序。
猜你喜欢
  • 2020-06-09
  • 2022-09-23
  • 2021-12-29
  • 2014-02-17
  • 1970-01-01
  • 2015-04-18
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多