java - 如何在遍历数组时删除元素

标签 java arrays java-8 java-stream

我有一个包含其他对象列表的对象,该列表包含另一个对象列表。很像 DTO。 在这些对象中,有另一种类型的对象的列表,如果对象包含特定的字符串,我想删除其中的元素。

例如

CustomerDTO customerDTO = CustomerTransformer.transformCustomer(custom);
List<InfoDTO> info = customerDTO.getInfo();
info(infoDTO -> {
    List<MoreDTO> d = infoDTO.getMore();
    for (MoreDTO moreDTO : d) {
        List<ChannelDTO> channels = MoreDTO.getChannels();
        for (ChannelDTO cdto : contentChannels) {
            if ("apple".equals(cdto.getId())) {
                moreDTO.getChannels().remove(cdto);
            }
        }
    }

});

但这看起来确实效率不高,并且可能会更改空指针?有没有更好的写法?使用流和在流中使用过滤器会有帮助吗?

我是 Java 新手。

最佳答案

您不能在迭代/循环时从列表中删除元素,将会出现 ConcurrentModificationException

因此,为了避免这种情况,您可以在此处使用 Java 8 Filter,以这种方式 -

contentChannels = contentChannels
 .stream()
 .filter(cdto->(!"apple".equals(cdto.getId())))
 .collect(Collectors.toList());

另一种选择是使用 removeIf()

关于java - 如何在遍历数组时删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55936647/

相关文章:

php - 需要从函数:(输出数组

arrays - 根据另一个 numpy 的 bin 对一个 numpy 数组求和

Java arraylist 找不到构造函数,使用 arrays.aslist

java - 使用java 8供应商传递函数代码

java - 如何在java中删除mongodb集合中的所有文档

java - 样式文本未从 JTextPane 正确保存

java - 无法在Java中创建缓存文件

java - 如何在 UnaryOperator java 8 中使用引用方法

java - Java 9+ 项目是否可以不受影响地使用 Java 8 中的单独源模块?

java - 从字符串位于不同行的文本中查找重新排列的字符串组