【发布时间】:2016-09-20 16:15:11
【问题描述】:
我是Java 8 的初学者,今天我刚刚开始使用我的第一个lambda 表达式。我有一个String 数组,想在排序前后打印值。下面是我的代码,现在它给出了stream has already operated upon or closed 异常,因为我在friendsStream 上使用了两次forEach。
import java.util.stream.Stream;
class FirstLambda {
public static void main(String [] args){
String [] friends = new String [] {"C","A","B","D"};
Stream<String> friendsStream = Stream.of(friends);
System.out.println("My Friends:-");
printStream(friendsStream);
System.out.println("My Friends (after sort):- ");
Stream<String> sortedFriends = friendsStream.sorted((String m,String n) -> m.compareTo(n));
printStream(sortedFriends);
}
private static void printStream(Stream<String> stream) {
stream.forEach(s->System.out.println(s));
}
}
我的问题是,解决我的问题的最简单或最好的方法是什么?那就是使用java 8Stream(即lambda)在排序前后打印字符串值
【问题讨论】:
-
您可以只使用
friendsStream.sorted()而不使用 lambda 进行排序,因为默认情况下它将使用compareTo方法。解决方案是使用两个不同的Stream对象。 -
我同意。但是,如何在排序之前和之后打印值?
-
@Sridhar 解决方案是使用两个不同的 Stream 对象。
标签: string sorting java-8 java-stream