简体   繁体   English

使用Java8列出地图

[英]List to Map using Java8

I want to convert a list of objects to a Map, 我想将对象列表转换为Map,
I'm trying to do it using Java 8's stream API, 我正在尝试使用Java 8的流API来做到这一点,
I'm getting 2 errors, 1 on import and 1 in the conversion code of List to Map. 我收到2个错误,其中1个是导入错误,1个是List到Map的转换代码。

Error while importing the Map interface - 导入地图界面时出错-
The import java.util.Map conflicts with a type defined in the same file.

Error in the conversion code - 转换码错误-

The type Map is not generic; it cannot be parameterized with arguments <String, BigDecimal>

Following is my code - 以下是我的代码-

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 + "]";
    }

}

My main class - 我的主要班级-

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;

    }
}

I referred the following question but I am unable to import the Map interface - The type HashMap is not generic; 我提到了以下问题,但无法导入Map接口 -HashMap类型不是通用的; it cannot be parameterized with arguments <String, Integer> 不能使用参数<String,Integer>对其进行参数化

The containing class is called Map hence the compilation error. 包含类称为Map因此发生编译错误。 To solve the issue simply rename your class to a different name or use: 要解决此问题,只需将您的类重命名为其他名称或使用:

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));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM