【发布时间】: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