我想将对象列表转换为地图,
我正在尝试使用 Java 8 的流 API 来做到这一点,
我收到 2 个错误,1 个是导入错误,1 个是列表到地图的转换代码中。
导入地图接口时出错 -
The import java.util.Map conflicts with a type defined in the same file.
转换代码错误 -
The type Map is not generic; it cannot be parameterized with arguments <String, BigDecimal>
以下是我的代码-
public class Developer {
private String name;
private BigDecimal sal;
private int age;
/**
* @param name
* @param sal
* @param age
*/
public Developer(String name, BigDecimal sal, int age) {
super();
this.name = name;
this.sal = sal;
this.age = age;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the sal
*/
public BigDecimal getSal() {
return sal;
}
/**
* @param sal
* the sal to set
*/
public void setSal(BigDecimal sal) {
this.sal = sal;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age
* the age to set
*/
public void setAge(int age) {
this.age = age;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Developer [name=" + name + ", sal=" + sal + ", age=" + age + "]";
}
}
我的主课-
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.Map;
public class Map {
public static void main(String[] args) {
List<Developer> listDevs = getDevelopers();
//Error here
Map<String, BigDecimal> result = listDevs.stream().collect(Collectors.toMap(Developer :: getName, Developer :: getSal));
}
private static List<Developer> getDevelopers() {
List<Developer> result = new ArrayList<>();
result.add(new Developer("mkyong", new BigDecimal("70000"), 33));
result.add(new Developer("alvin", new BigDecimal("80000"), 20));
result.add(new Developer("jason", new BigDecimal("100000"), 10));
result.add(new Developer("iris", new BigDecimal("170000"), 55));
return result;
}
}
我提到了以下问题,但我无法导入地图界面 -
HashMap 类型不是通用的;它不能用参数进行参数化
包含的类称为
Map
,因此会出现编译错误。要解决此问题,只需将您的类重命名为其他名称或使用:
java.util.Map<String, BigDecimal> result =
listDevs.stream()
.collect(Collectors.toMap(Developer::getName, Developer::getSal));
除了更改类名之外,您还可以执行以下操作:
java.util.Map<String, BigDecimal> result = listDevs.stream().collect(Collectors.toMap(Developer::getName, Developer::getSal));
您不需要使用完全限定名称。
您可以使用 Java 10 中引入的 var 关键字来声明局部变量,而无需显式指定类型。
var result = listDevs
.stream()
.collect(Collectors.toMap(Developer::getName, Developer::getSal));