我有一个需要处理传入对象的服务方法:(顺便说一下,这是伪代码)
public class IncomingParentObject {
public Collection<IncomingChildOject> childObjects;
}
public Class IncmoingChildObject {
public String name;
}
我有一个“客户端”的“注册表”,它关心传入的子对象的子集。在注册时我们只知道“名称”。客户端对象封装传输层的详细信息以将信息转发到。
public class Registry {
// String represents the name in the child object
public Map<String, Set<Client>> clients;
}
现在服务类就是这样的:
public void processIncmoingParentObject(IncomingParentObject parentObject) {
for (IncmoingChildObject childObject : parentObject.childObjects) {
Set<Client> clients = registry.clients.get(childObject.name);
for (Client client : clients) {
this.transportLayer.transportChildObject(childObject, client);
}
}
}
这导致对transportLayer的多次调用(这可能是昂贵的或及时的)。我想将这个减少到基本上每个ChildObjects子集的一个传输。
transportLayer.transport(Client client, Set<IncmoingChildObject> childObjects);
一个精致的庄园将通过父母的孩子扫描,以确定一个孩子的子集发送给客户。
答案 0 :(得分:3)
我会使用地图跟踪每个Set<IncomingChildObject>
的{{1}}。
在未经测试的Java中:
Client
答案 1 :(得分:1)
好吧,你可以建立一个地图名称 - &gt;子列表然后迭代列表并获取地图中每个键的客户端。然后将该客户端和映射条目的子项列表传递给传输层。
为此您可以尝试使用Apache Commons Collections项目中的Multimap实现之一(它不支持泛型,但是有第三方端口可以,或者尝试Google Guava,尽管我不喜欢知道它是否提供了多图。)