Java &引用;类型集的方法流()未定义<;人>&引用;

Java &引用;类型集的方法流()未定义<;人>&引用;,java,eclipse,lambda,java-8,java-stream,Java,Eclipse,Lambda,Java 8,Java Stream,我正在尝试运行一个示例java程序,我在java essential trails课程中找到了这个程序。我想使用eclipse逐步了解它,以便更好地了解发生了什么。Person类没有错误,但是MRTest类最后有一个错误,即调用它的类型的stream()方法未定义。我不知道怎么解决这个问题 import java.util.List; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator;

我正在尝试运行一个示例java程序,我在java essential trails课程中找到了这个程序。我想使用eclipse逐步了解它,以便更好地了解发生了什么。Person类没有错误,但是MRTest类最后有一个错误,即调用它的类型的stream()方法未定义。我不知道怎么解决这个问题

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Collection;
import java.util.function.Supplier;
import java.util.Set;
import java.util.HashSet;
import java.time.chrono.IsoChronology;

public class MRTest {

    // The method transferElements copies elements from one collection to
    // another

    public static <T, SOURCE extends Collection<T>, DEST extends Collection<T>>
        DEST transferElements(
            SOURCE sourceCollection,
            Supplier<DEST> collectionFactory) {

            DEST result = collectionFactory.get();
            for (T t : sourceCollection) {
                result.add(t);
            }
            return result;
    }  

    public static void main(String... args) {

        List<Person> roster = Person.createRoster();        

        for (Person p : roster) {
            p.printPerson();
        }


        Person[] rosterAsArray = 
            roster.toArray(new Person[roster.size()]);

        class PersonAgeComparator
            implements Comparator<Person> {
            public int compare(Person a, Person b) {
                return a.getBirthday().compareTo(b.getBirthday());
            }
        }

        // Without method reference
        Arrays.sort(rosterAsArray, new PersonAgeComparator());

        // With lambda expression
        Arrays.sort(rosterAsArray,
            (Person a, Person b) -> {
                return a.getBirthday().compareTo(b.getBirthday());
            }
        );

        // With method reference
        Arrays.sort(rosterAsArray, Person::compareByAge);

        // Reference to an instance method of a particular object
        class ComparisonProvider {
            public int compareByName(Person a,
                Person b) {
                return a.getName().compareTo(b.getName());
            }

            public int compareByAge(Person a,
                Person b) {
                return a.getBirthday().compareTo(b.getBirthday());
            }
        }
        ComparisonProvider myComparisonProvider = new ComparisonProvider();
        Arrays.sort(rosterAsArray, myComparisonProvider::compareByName);

        // Reference to an instance method
        // of an arbitrary object of a particular type

        String[] stringArray = { "Barbara", "James", "Mary", "John",
            "Patricia", "Robert", "Michael", "Linda" };
        Arrays.sort(stringArray, String::compareToIgnoreCase);

        Set<Person> rosterSetLambda =
            transferElements(roster, () -> { return new HashSet<>(); });

        Set<Person> rosterSet = transferElements(
            roster, HashSet::new);
        System.out.println("Printing rosterSet:");
        rosterSet.stream().forEach(p -> p.printPerson()); // This is the line that is the problem.
    }
}
import java.util.List;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Comparator;
导入java.util.Collection;
导入java.util.function.Supplier;
导入java.util.Set;
导入java.util.HashSet;
导入java.time.chrono.IsoChronology;
公共类MRT测试{
//方法transferElements将元素从一个集合复制到另一个集合
//另一个
公共静电
转移元素(
源集合,
供应商(收集工厂){
DEST result=collectionFactory.get();
for(T:sourceCollection){
结果:添加(t);
}
返回结果;
}  
公共静态void main(字符串…参数){
列表花名册=Person.create花名册();
人员(p:名册){
p、 printPerson();
}
Person[]rosterAsArray=
toArray(新人[floster.size());
类人物比较器
执行比较器{
公共整数比较(人员a、人员b){
返回a.getBirthday().compareTo(b.getBirthday());
}
}
//无方法参考
sort(rosterAsArray,newPersonageComparator());
//带lambda表达式
数组。排序(数组,
(人员a、人员b)->{
返回a.getBirthday().compareTo(b.getBirthday());
}
);
//方法参考
sort(rosterAsArray,Person::compareByAge);
//对特定对象的实例方法的引用
类比较提供程序{
public int compareByName(个人a,
人员(b){
返回a.getName().compareTo(b.getName());
}
公共int compareByAge(个人a,
人员(b){
返回a.getBirthday().compareTo(b.getBirthday());
}
}
ComparisonProvider myComparisonProvider=新ComparisonProvider();
排序(rosterAsArray,myComparisonProvider::compareByName);
//对实例方法的引用
//指特定类型的任意对象
String[]stringArray={“Barbara”、“James”、“Mary”、“John”,
“帕特里夏”、“罗伯特”、“迈克尔”、“琳达”};
sort(stringArray,String::CompareTignoreCase);
布列斯特兰布达酒店=
TransferElement(花名册,()->{returnnewhashset();});
设置名册集合=转移要素(
花名册,哈希集::新建);
System.out.println(“打印花名册集:”);
rosterSet.stream().forEach(p->p.printPerson());//这就是问题所在。
}
}

问题是类路径中有1.7SE库,将其更改为1.8修复了它


请参阅问题注释部分的详细信息

您的Eclipse使用的是什么Java编译器?您有什么版本的Java JDK?Streams是在8中添加的,所以您可能会有一个较旧的版本。eclipse luna 4.4、JRE8和java compliance level 1.8不是JRE,哪个编译器符合级别?您的项目是什么>右键单击>属性>java构建路径>库视图?