【问题标题】:"method stream() is undefined for the type Set<Person>"“Set<Person> 类型的方法流()未定义”
【发布时间】:2014-07-10 23:55:33
【问题描述】:

我正在尝试运行我在 java 基本路径课程中找到的示例 java 程序。我想使用 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.
    }
}

【问题讨论】:

  • 您的 Eclipse 使用什么 Java 编译器?
  • 你有什么版本的 Java JDK?流是在 8 中添加的,因此您可能有一个旧版本。
  • eclipse luna 4.4、JRE8 和 java 合规级别 1.8
  • 不是 JRE,哪个编译器合规级别?
  • 你的项目是什么>右键>属性>java构建路径>库视图看起来像?

标签: java eclipse lambda java-8 java-stream


【解决方案1】:

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

详见问题 cmets 部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 2016-06-07
    • 2021-06-19
    • 2014-07-14
    相关资源
    最近更新 更多