gpt4 book ai didi

Java流,如何将函数应用于先前的结果

转载 作者:行者123 更新时间:2023-12-03 08:20:10 26 4
gpt4 key购买 nike

我一直在寻找正确的答案,但没有找到符合我目的的东西。

我有一个像这样的简单 for 循环:

String test = "hi";

for(Something something : somethingList) {
if(something.getSomething() != null) {
test = cleaner.clean(test, something.getSomething());
} else if(something.getOther() != null) {
test = StaticClass.clean(test, something.getOther());
}
}

我从来不明白使用java流是否可以达到相同的结果。也许可以减少?我需要将上一个循环的响应(保存在“test”变量中)传递到下一个循环(请参阅 clean 方法,我在其中通过了测试)。我怎样才能做到这一点?

最佳答案

如果您想对列表中的每个元素执行某些操作(使用 for every 循环),我建议使用 forEach or forEachOrdered功能。这些应该代表您的for(Object o :objects)。您可以轻松定义自己的Consumer类,它为你处理所有的事情:

class CustomConsumer implements Consumer<Integer> {

private Integer previous;

public CustomConsumer(Integer initialValue) {
previous = initialValue;
}

@Override
public void accept(Integer current) {
// do stuff with your current / previous object :)
System.out.println("previous: " + previous);
previous = current;
}
}

List<Integer> values = getValues();

values.stream()
.forEachOrdered(new CustomConsumer(-1));

此示例使用 Integer 作为提供的类,如果您想使用自己的类,只需替换 Integer。您甚至可以使用泛型:

class CustomConsumer<T> implements Consumer<T> {

private T previous;

public CustomConsumer(T initialValue) {
previous = initialValue;
}

@Override
public void accept(T current) {
// do stuff with your current / previous object :)
System.out.println("previous: " + previous);
previous = current;
}
}

List<Integer> values = new ArrayList<>();

for(int i = 0; i < 6; i++)
values.add(i);

values.stream()
.forEachOrdered(new CustomConsumer<>("hello"));

输出:

previous: hello
previous: 0
previous: 1
previous: 2
previous: 3
previous: 4

如果您想了解有关流的更多信息,oracle 文档提供了一些 good stuff .

关于Java流,如何将函数应用于先前的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68083727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com