有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java For对较少项目的循环操作

例如,要从包含音频、视频、图像等的文件列表中仅选择音频,我使用以下代码

private void selectAllAudio() {
    for(Entity entity: entities){
        if(entity.getItemType() == ItemType.Audio){
            entity.setSelected(true);
        }
    }
}

上述代码将循环所有1000项,其中只有100项是音频。所以我只想知道有没有更好的方法来选择所有的音频而不是循环所有的文件


共 (2) 个答案

  1. # 1 楼答案

    嗯,我看不出有什么解决办法
    就我理解你的问题而言,这个实体对象是“固定的”(意思是你在运行时已经拥有它,或者你以某种方式查询某个对象并得到该对象)。
    正如您在评论中所说的,因为您有Java7,所以实现这一点的唯一方法是通过一个普通的for循环
    如果您是从Java8开始的,那么这将是另一种方式

    private void selectAllAudio() {
    entities.stream().filter (s -> entity.getItemType() == ItemType.Audio).peek(object -> object.setSelected(true)).toList(Entity::new);
    }
    //Use the toList() method only if you then need a List of all Audio Objects
    


    渐近地说,流和正常迭代应该同时进行,但是如果大O中的效率是你所要寻找的,那么你可能需要考虑其他数据结构(即,哈希集上的基本操作是,大多数时候,constants,而这并不总是真的for Lists)。
    请注意,Java 7中有一些库(比如thisone,尽管它的最后一次更新是在4年前)以某种方式实现了Java 8的Lambda表达式和流,但是,当然,我们谈论的不是同一件事……)

  2. # 2 楼答案

    如果迭代是一个瓶颈,那么可以使用不同的数据结构。您可以仅为ItemType.Audio项维护一个单独的集合。您还可以维护一个Map,其中键是ItemType。这两个选项都允许快速访问您感兴趣的项目