- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 MultiMap 假设 Company 以 String 作为键,另一个 MultiMap 假设 Employee 为值。 Employee Multimap 将 String 作为键,将另一个 multimap 作为值。我的问题是如何检索和迭代存储在 multimap 中的 multimap?我正在使用 Apache 通用 MultiMap。
示例:compMap 有 2 家公司。 CompA 和 CompB每个公司有 10 名员工。(员工可以多次出现,因此使用 multimap )
Coll 包含来自 compA 的员工多图,但是我如何从员工多图中检索特定员工(如果他出现 4 次)?
代码:
if (!compMap.isEmpty()){
Set compSet = compMap.keySet( );
Iterator compIterator = compSet.iterator();
while( compIterator.hasNext( ) ) {
comp= compIterator.next().toString();
Collection coll = (Collection) compMap.get(comp);
.....
}
最佳答案
您遇到的问题是因为一个员工不应该在一个集合中出现两次。如果您将两个值存储在 MultiValueMap 中的同一个键下,那么这些值就是不同的值(尽管它们可以通过同一个键访问)。
您应该将您的数据模型迁移到更面向对象的模型,而不是使用位于另一个 key 存储容器内的 key 存储容器( map 中的 map )。
考虑仅使用集合/列表的以下模型。值根据等于/哈希码进行区分。如果您使用列表,您可以在公司内部拥有许多员工(如果您确实需要,他们可以具有相同的名称)。为什么使用 MultiValueMap 使它复杂化?
public class AbcTest {
public static void main(String[] args) {
Address address1 = new Address("street1");
Address address2 = new Address("street2");
Employee employee1 = new Employee("employee1");
employee1.getAddresses().add(address1);
employee1.getAddresses().add(address2);
Employee employee2 = new Employee("employee2");
employee2.getAddresses().add(address2);
Company companyA = new Company("compA");
companyA.getEmployees().add(employee1);
companyA.getEmployees().add(employee1); // you can add employee to the list as many times as you want, if you really need this?
companyA.getEmployees().add(employee2);
// now to get the employee with give name simly iterate over list of employees
Iterator<Employee> employeeIt = companyA.getEmployees().iterator();
Employee wantedEmployee = null;
while (employeeIt.hasNext() && (wantedEmployee == null)) {
Employee next = employeeIt.next();
if (next.getName().equals("employee1")) {
wantedEmployee = next;
}
}
System.out.println(wantedEmployee);
}
}
class Company {
final String name;
final List<Employee> employees;
Company(String name) {
this.name = name;
this.employees = new ArrayList<>();
}
public String getName() {
return name;
}
public List<Employee> getEmployees() {
return employees;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if ((o == null) || (getClass() != o.getClass())) {
return false;
}
Company company = (Company) o;
if ((employees != null) ? (!employees.equals(company.employees)) : (company.employees != null)) {
return false;
}
if ((name != null) ? (!name.equals(company.name)) : (company.name != null)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = (name != null) ? name.hashCode() : 0;
result = (31 * result) + ((employees != null) ? employees.hashCode() : 0);
return result;
}
}
class Employee {
final String name;
final Set<Address> addresses;
Employee(String name) {
this.name = name;
this.addresses = new HashSet<>();
}
public String getName() {
return name;
}
public Set<Address> getAddresses() {
return addresses;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if ((o == null) || (getClass() != o.getClass())) {
return false;
}
Employee employee = (Employee) o;
if ((addresses != null) ? (!addresses.equals(employee.addresses)) : (employee.addresses != null)) {
return false;
}
if ((name != null) ? (!name.equals(employee.name)) : (employee.name != null)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = (name != null) ? name.hashCode() : 0;
result = (31 * result) + ((addresses != null) ? addresses.hashCode() : 0);
return result;
}
}
class Address {
final String street;
Address(String street) {
this.street = street;
}
public String getStreet() {
return street;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if ((o == null) || (getClass() != o.getClass())) {
return false;
}
Address address = (Address) o;
if ((street != null) ? (!street.equals(address.street)) : (address.street != null)) {
return false;
}
return true;
}
@Override
public int hashCode() {
return (street != null) ? street.hashCode() : 0;
}
}
关于java - Apache Common MultiValueMap 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376692/
嗨,我正在尝试访问 Hashmap 中的 MultiValueMap 这是我的 HashMap projectDetails HashMap private HashMap classDetailsM
我创建了一个 MultiValueMap,它有重复的键。我想知道如何获取重复键及其值的列表? key value A 4 A 6 B 7 C
我最近从 php 转向了 java,所以我的 java 技能相当低。 在我的代码中,我有一个名为 queryParams 的 MultiValueMap MultiValueMap queryPara
我正在使用 Apache Collections 中的 MultiValueMap 来收集不同类型的单词(名词、动词等),并且我想在继续之前检查是否至少拥有每种单词类型之一。 总体轮廓如下(启动按键后
在一个地方,我必须使用一个映射,其中许多值映射到一个键,所以我想知道使用 HashMap of key, list 和 之间是否有任何显着的性能差异Java 中键、值的多映射。 最佳答案 您可以尝试一
我的服务出现问题。以下是我的服务 @POST @Path("/config") @Consumes(MediaType.APPLICATION_JSON) public Response saveCo
我使用此代码从 HTTP 请求中获取值: @PostMapping(consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, value = "/
我有一个 MultiValueMap 我正试图从中获取[出于这个问题的目的而打印] 使用相同 key 放入 map 中的所有路径。 这是我目前的解决方案: MultiValueMap duplicat
我有一个 MultiMap 假设 Company 以 String 作为键,另一个 MultiMap 假设 Employee 为值。 Employee Multimap 将 String 作为键,将另
Apache Commons Collections 的 4.0 版库添加了泛型支持。我在转换我的代码以利用它时遇到问题: 我想要一个 MultiValueMap 它以字符串作为键,以字符串集合作为值
我想像这样构建一个 JSON: { "Id": "33396", "Actions": [ { "Key": "5", "Value": "Test"
我有一个问题,如何为这个 hashmap 设置值并模拟它 Map > idsrcMp = new HashMap<>(3); 最佳答案 我不确定“设置值并模拟它”是什么意思。你想设置值或模拟它吗? 您
这是我正在考虑做的事情,我想知道您是否认为这是一个好主意。 我从数据库中检索了一堆行,在 groovy 中它为我提供了一个列表列表,如下所示: [ [ 'Dog', 'M', 'Mutt', 'S
我有参数的多重映射,如下所示: { keyA: ["2+4", "4+8"], keyB: ["Some words with special chars #ąęć"] } 作为 sp
我已经在 Spring boot 中实现了 OAuth2。在 JUnit 中测试它时效果很好,但当我在 postman 中尝试该 API 时,我总是遇到未经授权的情况。 JUnit 中的测试函数: p
我需要一个 TreeMap可以容纳多个值,所以我选择了 MultiValueMap来自 Commons Collections 4.0 用HashMap很简单 private MultiValueM
下面给出了 org.apache.commons.collections.map.MultiValueMap 的示例(来自 commons-collections-3.2.1) Map multiVa
我想发送一个 POST 请求,其中包含一个文件和另一个使用 restTemplate 的自定义对象。我试过下面的代码,但没有成功,因为它缺少 java.io.File 的 HtttpMessageCo
我正在尝试将 map 转换为多值 map ,但出现以下编译异常: Wrong 1st argument type. Found: java.util.Map>, required: org.sprin
我正在使用 spring2.5。并尝试为ajax上传实现自定义CommonsMultipartResolver。 提交表单后,出现以下错误: org.springframework.web.util.
我是一名优秀的程序员,十分优秀!