Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Lambda表达式将列表转换为映射无效_Java_Lambda_Collections_Java 8_Java Stream - Fatal编程技术网

Java 使用Lambda表达式将列表转换为映射无效

Java 使用Lambda表达式将列表转换为映射无效,java,lambda,collections,java-8,java-stream,Java,Lambda,Collections,Java 8,Java Stream,我试图将学生对象列表转换为一个键为integeri.e的映射。学生对象和值的rollno字段是学生对象本身 以下是我编写的代码: package fibonacci; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class MApfor { p

我试图将学生对象列表转换为一个键为integeri.e的映射。学生对象和值的rollno字段是学生对象本身

以下是我编写的代码:

package fibonacci;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class MApfor {


    public static void main(String[] args) {


        List<Student> maplist=new ArrayList<>();

        maplist.add(new Student(1, "pavan"));
        maplist.add(new Student(2, "Dhoni"));
        maplist.add(new Student(3, "kohli"));

        maplist.forEach(System.out::println);

        Map<Integer,Student> IS=new HashMap<>();



        IS = maplist.stream().collect(Collectors.toMap(a -> a.getRollNo,a);



    }
}
我无法检索rollNo字段,eclipse没有显示建议,即每当我键入a.get将rollNo分配给键时,我都无法这样做

请提出我面临的问题

package fibonacci;

public class Student {


    public int rollNo;
    public String name;
    public int getRollNo() {
        return rollNo;
    }
    public void setRollNo(int rollNo) {
        this.rollNo = rollNo;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Student(int rollNo, String name) {
        super();
        this.rollNo = rollNo;
        this.name = name;
    }
    @Override
    public String toString() {
        return " [rollNo=" + rollNo + ", name=" + name + "]";
    }

}
a、 getRollNo不存在,正确的getter是a.getRollNo或a.rollNo,但是您最好将您的成员设置为private 必须使用->函数,将对象映射到自身: 使用方法参考

a、 getRollNo不存在,正确的getter是a.getRollNo或a.rollNo,但是您最好将您的成员设置为private 必须使用->函数,将对象映射到自身: 使用方法参考

应该是这样的

maplist.stream().collect(Collectors.toMap(a -> a.rollNo, Function.identity()));
或者更好的方法是将getter与方法引用一起使用

maplist.stream().collect(Collectors.toMap(Student::getRollNo, Function.identity()));
a->a.getRollNo这是不正确的。您应该使用公共字段或getter。你两个都没有正确使用

当您说a.getRollNo时,这意味着在您的类中应该有一个名为getRollNo的公共字段,这是不正确的。您的字段称为rollNo。 然后,如果您想访问rollNo的getter方法,那么它应该类似于a.getRollNo。你最终失踪了。 但您也可以使用类似Student::getRollNo这样的方法引用

所以它应该是其中之一

a -> a.rollNo
a -> a.getRollNo()
Student::getRollNo
您也可以用a->a替换Function.identity。

应该是这样的

maplist.stream().collect(Collectors.toMap(a -> a.rollNo, Function.identity()));
或者更好的方法是将getter与方法引用一起使用

maplist.stream().collect(Collectors.toMap(Student::getRollNo, Function.identity()));
a->a.getRollNo这是不正确的。您应该使用公共字段或getter。你两个都没有正确使用

当您说a.getRollNo时,这意味着在您的类中应该有一个名为getRollNo的公共字段,这是不正确的。您的字段称为rollNo。 然后,如果您想访问rollNo的getter方法,那么它应该类似于a.getRollNo。你最终失踪了。 但您也可以使用类似Student::getRollNo这样的方法引用

所以它应该是其中之一

a -> a.rollNo
a -> a.getRollNo()
Student::getRollNo

您也可以将Function.identity替换为a->a。

输出的结构是什么?is=maplist.stream.collectCollectors.toMapa->a.getRollNo,a->a;输出的结构是什么?is=maplist.stream.collectCollectors.toMapa->a.getRollNo,a->a;谢谢kiran,当我用a.rollNo替换a.getRollNo时,它起作用了。你能解释一下这一行我又做错了什么吗?你应该使用公共字段或getter。你两个都没有用对。现在我明白了,我一直在等待eclipse给出建议,每当我键入a.get时,我都没有得到这个getRollNo建议。谢谢kiran,当我用a.rollNo替换a.getRollNo时,它起了作用。你能再解释一下这行我做错了什么吗?你应该使用公共字段或getter。现在我明白了,我一直在等待eclipse在我键入a.get时给出建议,但我没有得到这个getRollNosuggestion@PavanGhantasala其他人的回答跟我一样,但我没注意到时间…:-@PavanGhantasala其他人的回答跟我一样,但Okok玩fairbro,我没有注意到时间…:-