JAVA_IllegalStateException(非法状态异常)

在Java中,当我们尝试对已操作或关闭的Stream进行多次操作时,可能会遇到IllegalStateException。文章通过示例代码解释了这个问题,并提出解决方案,即每次操作Stream时都应从源头重新获取新的流。示例中展示了如何正确地过滤和转换字符串流,避免异常的发生。
摘要由CSDN通过智能技术生成

1.我们操作stream流的时候可能会遇到IllegalStateException异常

java.util.stream.Stream<String> stream = Arrays.stream(words);
        List<String> list1 = stream.filter(s -> s.length() < 6).collect(Collectors.toList());
        System.out.println("list1 = " + list1);
        //将所有字符串转换为**小写**。
        List<Object> list2 = stream.map((Function<String, Object>) s -> s.toLowerCase()).collect(Collectors.toList());
        System.out.println("list2 = " + list2);

这样提前把stream流创建出来,就会导致流已被操作或关闭,意思就是流提前被关闭了,所以我们操作不了
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
	at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)
	at java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:94)
	at java.util.stream.ReferencePipeline$StatelessOp.<init>(ReferencePipeline.java:618)
	at java.util.stream.ReferencePipeline$3.<init>(ReferencePipeline.java:187)
	at java.util.stream.ReferencePipeline.map(ReferencePipeline.java:186)
	at com.itheima.Stream.main(Stream.java:30)

解决办法:就是每次操作流都要获取新的流,就完美解决异常了

 List<String> list1 = Arrays.stream(words).filter(s -> s.length() < 6).collect(Collectors.toList());
        System.out.println("list1 = " + list1);
        //将所有字符串转换为**小写**。
        List<Object> list2 = Arrays.stream(words).map((Function<String, Object>) s -> s.toLowerCase()).collect(Collectors.toList());
        System.out.println("list2 = " + list2);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.illegalstateexceptionJava编程语言中的一个异常类(exception class),通常是由于程序处于非法状态(illegal state)时抛出的异常。这个异常类通常会在以下情况下抛出: 1. 当试图访问已经关闭的流(stream)时,会抛出java.lang.illegalstateexception异常。例如,你尝试访问一个已经关闭的文件流,这时就会出现这个异常。 2. 当尝试调用已经被删除的对象(object)时,也会抛出这个异常。这通常是因为在程序运行过程中,某个对象被删除了,但是其他部分的代码对该对象仍然有引用,这时就会抛出这个异常。 3. Java中的状态转换错误也会导致java.lang.illegalstateexception异常的产生。例如,当某个类要求程序必须处于某种状态才能执行某个操作时,如果程序当前不处于这种状态,就会抛出这个异常。 4. 如果使用某个已经被终止的线程,也会引发java.lang.illegalstateexception异常。这通常是由于程序员在代码中没有正确处理线程的生命周期,导致线程被意外地终止。 总之,java.lang.illegalstateexception异常通常意味着程序在某个方面处于非法状态,需要对程序进行适当的修复或处理来解决这个问题。因此,当你遇到这个异常时,应该首先检查程序的状态,特别是那些对对象、线程、文件流等进行操作的代码。如果无法确定问题所在,可以查看异常的堆栈跟踪(stack trace)以了解更多信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值