gpt4 book ai didi

string - Stream - 打印排序前后的值

转载 作者:行者123 更新时间:2023-12-02 04:05:53 25 4
gpt4 key购买 nike

我是 Java 8 的初学者,今天我刚刚开始使用我的第一个 lambda 表达式。我有一个 String 数组,想在排序之前和之后打印值。下面是我的代码,现在它给出了 stream has not been Operated on 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 8 Stream (即 lambda)打印排序之前和之后的字符串值

最佳答案

当您问“解决我的问题的最简单或最好的方法是什么?”时,答案是您根本不需要 Stream:

String[] friends = {"C", "A", "B", "D"};
System.out.println("My Friends: "+Arrays.toString(friends));
Arrays.sort(friends);
System.out.println("My Friends (after sort): "+Arrays.toString(friends));

请注意,这同样适用于 Collection API:

List<String> friends = Arrays.asList("C", "A", "B", "D");
System.out.println("My Friends: "+friends);
friends.sort(Comparator.naturalOrder());
System.out.println("My Friends (after sort): "+friends);

如果您想引入 Stream API,有多种方法。最简单的:

String[] friends = {"C", "A", "B", "D"};
System.out.println("My Friends: ");
Arrays.stream(friends).forEachOrdered(System.out::println);
System.out.println("My Friends (after sort): ");
Arrays.stream(friends).sorted().forEachOrdered(System.out::println);

请注意,Arrays.stream 是为现有数组构造流的首选方式,这也适用于 int[]long[]double[],而 Stream.of 是使用给定参数构造流的规范方法,使用 varargs 功能,例如Stream.of("C", "A", "B", "D").

我们可以将其用于下一个变体,使用单个流并查看流:

Stream.of("C", "A", "B", "D")
.peek(System.out::println)
.sorted()
.forEachOrdered(System.out::println);

但请注意,peek 主要用于调试流处理,因为它允许在处理元素时查看元素。

但是如果您想了解 Stream API,您应该避免使用 forEachforEachOrdered,因为所有操作都包含 forEach/forEachOrdered 最终只是编写循环的一种替代方法,而且通常是一种更复杂的方法。

考虑到实际的预期操作是组成要打印的字符串,更复杂的用法是:

String[] friends = {"C", "A", "B", "D"};
System.out.println("My Friends: "
+Arrays.stream(friends).collect(Collectors.joining(", ")));
System.out.println("My Friends (after sort): "
+Arrays.stream(friends).sorted().collect(Collectors.joining(", ")));

关于string - Stream - 打印排序前后的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39599093/

25 4 0