gpt4 book ai didi

java - 如何避免不同的方法循环同一个列表?

转载 作者:行者123 更新时间:2023-12-01 10:37:01 26 4
gpt4 key购买 nike

我有一个从 xml 映射的类。为了简单起见,我们假设这个类是这样的:

class Employee implements EmployeeIF {
Map<AttributeIF,Object> attribute = new HashMap<>();
@Override
public Map<AttributeIF,Object> getAttributes() { return attribute; }
}

这是我无法改变的。

现在,现有代码充满了如下方法:

public int getSalary(EmployeeIF employee) {
for(Entry<AttributeIF,Object> entry : employee.getAttributes()) {
if(entry.getKey().getName().equals("salary")) return (Integer)entry.getValue();
}
return 0;
}

public int getAddress(EmployeeIF employee) {
for(Entry<AttributeIF,Object> entry : employee.getAttributes()) {
if(entry.getKey().getName().equals("address")) return (String)entry.getValue();
}
return "";
}

...等等。你肯定明白了。

我需要包含一个新方法来从员工返回一个新属性,但由于我觉得这很难维护,所以我拒绝在那里添加一个新方法。我正在考虑使用操作模式来以某种方式避免至少一次又一次地重复 for 循环,但我不得不说我找不到一个明智的解决方案。

你的选择是什么?

谢谢,丹尼。

P.D 是的,我尝试过类似的方法

private Object getAttribute(EmployeeIF employee, String attribute)

最佳答案

这是一个小示例,您如何根据您没有的对象作为键来获取值。

public class TestObject {
public String val;

public TestObject(String val) {
this.val = val;
}

public static TestObject createDummy(String val) {
return new TestObject(val);
}

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof TestObject)) return false;
return ((TestObject)obj).val.equals(this.val);
}

@Override
public int hashCode() {
System.out.println("THIS ONE IS IMPORTANT");
return val.hashCode();
}
}

public class TestMap {
public Map<TestObject, String> map = new HashMap<>();

public String get(String keyVal) {
return map.get(TestObject.createDummy(keyVal));
}

public static void main(String[] args) {
TestMap map = new TestMap();
TestObject o1 = new TestObject("A");
map.map.put(o1,"B");
TestObject o2 = new TestObject("B");
map.map.put(o2,"C");
TestObject o3 = new TestObject("C");
map.map.put(o3,"D");
System.out.println(map.get("B"));
}
}

关键是覆盖 equalshashCode在你的AttributeIF类(class)。因此,如果您传递它们的虚拟对象 AttributeIF你确实想让你的 map 需要识别这个虚拟对象与你的 Map 中理论上“相等”的关键对象实例的实例相等.

关于java - 如何避免不同的方法循环同一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34630715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com