当前位置: 首页 > 知识库问答 >
问题:

我可以说java.util.Stream.Stream中的peek()方法应该是幂等的吗

司空丰
2023-03-14

我的问题与:幂等方法意味着什么,在调用java.lang.AutoCloseable的close方法的情况下有什么副作用?

关于Java.util.stream.stream.peek()中的方法,在Oracle Certified Professional Java SE 8 Study Guide>第4章函数式编程>使用流>使用通用中间操作一书中指出,peek()的目的是在不改变结果的情况下执行操作

我的问题是:我是否可以说在实践中,peek中的动作(消费者动作)应该是幂等的,即使peek()中的有状态代码可以编译?

共有1个答案

钱焕
2023-03-14

您不应该这样做,因为这意味着操作可以改变最终结果,因为一个幂等操作可以改变它所操作的对象。

下面的示例在peek()方法中使用了一个幂等操作,但更改了结果(根据您指出的文档,这不是一个好的做法)

import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

class SomeClass {

    private String state = "some-value";

    public void idempotent() {
        state = "other-value";
    }


    @Override
    public String toString() {
        return "SomeClass{" +
                "state='" + state + '\'' +
                '}';
    }
}

public class Idempotent {

    public static void main(String[] args) {
        Set<SomeClass> collect = Stream.of(new SomeClass(), new SomeClass())
                .peek(SomeClass::idempotent)
                .collect(Collectors.toSet());
        System.out.println(collect);
    }
}

peek()操作之前,流由[“some-value”,“some-value]组成,在具有幂等操作的peek()之后,流由[”other-value“,”other-value“]组成。

 类似资料:
  • 我读过很多地方说HTTP补丁是非幂等的。有人能解释一下为什么它是非幂等的吗?因为根据定义,幂等方法可以改变资源状态,也可以不改变资源状态,但是重复的请求在第一个请求之后应该不会有进一步的副作用。重复的补丁请求如何改变资源状态?

  • 正如我们所知,Java是一种面向对象的语言。在Java中,一切都是对象。我们还知道对象有一些东西(实例变量/字段)和一些事情(方法)。它的安全,我们改变了使用方法,即实例变量的状态;二传手

  • 我想提出我的问题的一种方式是:如果我使用put来进行一个非幂等调用,然后使用POST来这样做,会有什么问题呢?

  • 本文向大家介绍Kafka中的幂等是怎么实现的相关面试题,主要包含被问及Kafka中的幂等是怎么实现的时的应答技巧和注意事项,需要的朋友参考一下 pid+序号实现,单个producer内幂等? 扩展问题: Kafka中有那些地方需要选举?这些地方的选举策略又有哪些? 失效副本是指什么?有那些应对措施? 多副本下,各个副本中的HW和LEO的演变过程 为什么Kafka不支持读写分离? Kafka在可靠性

  • 接口是在Java5中引入的,而接口与语句一起出现在Java7中。扩展了接口(从Java7开始)。 在《OCA/OCP Java SE7-Programmer I&II学习指南》一书中,第399页说: 如果我们多次调用会发生什么?看情况.对于实现的类,要求实现是幂等的。这意味着您可以整天调用,第二次或以后都不会发生任何事情。[...]对于实现的类,则没有这样的保证。 因此本文认为,的实现必须是幂等的