Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免循环从集合中获取一列特定值<;实体>;在爪哇_Java_Performance_Loops_For Loop - Fatal编程技术网

Java 避免循环从集合中获取一列特定值<;实体>;在爪哇

Java 避免循环从集合中获取一列特定值<;实体>;在爪哇,java,performance,loops,for-loop,Java,Performance,Loops,For Loop,我有一个Java代码片段,如下所示: Set<BookDO> bookSet = shopDO.getBooks(); Collection<String> bookCollection = null; if (bookSet != null && !bookSet .isEmpty()) { bookCollection = new ArrayList<String>(); for (BookDO bo

我有一个Java代码片段,如下所示:

Set<BookDO> bookSet = shopDO.getBooks();
    Collection<String> bookCollection = null;
    if (bookSet != null && !bookSet .isEmpty()) {
      bookCollection = new ArrayList<String>();
      for (BookDO book : bookSet) {
        bookCollection .add(book.getName());
      }
    }
Set bookSet=shopDO.getBooks();
集合bookCollection=null;
if(bookSet!=null&&!bookSet.isEmpty()){
bookCollection=newarraylist();
for(bookdook:bookSet){
bookCollection.add(book.getName());
}
}
最后,我希望唯一的图书名称集合将其传递给显示输出的API


是否可以避免使用for循环来提高性能?

您不必担心循环构造的性能。有一个JIT,它将在运行时优化事情

您有一套包含n元素的书籍。您希望检索每个集合项的属性;并将该值推送到列表中。如果不迭代整个集合,这是不可能的!你知道,为了触摸每个元素,你必须触摸每个元素

是的,使用java8流,可以以各种方式重写;您可能会获得一些性能,因为这将使编译器能够使用字节码指令(具有某些性能优势)

但最终:您无法绕过迭代该集合的所有条目

而真正的收获是:你只是假设你有一个性能问题。不要试图修复一些不真实的东西;直到它成为真正的问题。当然,如果该集合包含大量条目,那么您确实有一个真正的问题。但是你的问题仍然在错误的方向上;因为如果你在做“硬核”数据处理;你必须重新思考你的整个设计,以找到“扩展”的方法


警告:如果我们谈论的是量子计算,那么,疯狂的事情是可能的。但是我们不是。您不应该担心循环构造的性能。有一个JIT,它将在运行时优化事情

您有一套包含n元素的书籍。您希望检索每个集合项的属性;并将该值推送到列表中。如果不迭代整个集合,这是不可能的!你知道,为了触摸每个元素,你必须触摸每个元素

是的,使用java8流,可以以各种方式重写;您可能会获得一些性能,因为这将使编译器能够使用字节码指令(具有某些性能优势)

但最终:您无法绕过迭代该集合的所有条目

而真正的收获是:你只是假设你有一个性能问题。不要试图修复一些不真实的东西;直到它成为真正的问题。当然,如果该集合包含大量条目,那么您确实有一个真正的问题。但是你的问题仍然在错误的方向上;因为如果你在做“硬核”数据处理;你必须重新思考你的整个设计,以找到“扩展”的方法

警告:如果我们谈论的是量子计算,那么,疯狂的事情是可能的。但我们没有。很抱歉更新太晚:

不可能。在当前代码之外,这是不可能的(除了使用Java8特性来隐藏它之外)

如果
shopDO.getBooks()代码在您手中您还有其他选择:

  • 如果图书名称是唯一的,请使用Map而不是将Name设置为键。 然后,您的书名就直接从中取出来,名为
    bookMap.keySet()
  • 如果书名不唯一,您可以从
    shopDO
    two collections返回1<代码>设置
列表
当您第一次填充
设置
如果无法修改
shopDo
代码,则没有选项

很抱歉更新太晚:

不可能。在当前代码之外,这是不可能的(除了使用Java8特性来隐藏它之外)

如果
shopDO.getBooks()代码在您手中您还有其他选择:

  • 如果图书名称是唯一的,请使用Map而不是将Name设置为键。 然后,您的书名就直接从中取出来,名为
    bookMap.keySet()
  • 如果书名不唯一,您可以从
    shopDO
    two collections返回1<代码>设置
列表
当您第一次填充
设置

如果无法修改
shopDo
代码,则没有选项

这是不可能的,但您可以使用lambda表达式优化该代码

Set<BookDO> bookSet = [dataSorce]
Collection<String> bookCollection;
if (bookSet != null && bookSet.isEmpty()) {
    bookCollection = new ArrayList<String>();
    bookSet.forEach((book) -> {
        bookCollection.add(book.getName());
    });
}
Set bookSet=[dataSorce]
收藏书籍收藏;
if(bookSet!=null&&bookSet.isEmpty()){
bookCollection=newarraylist();
bookSet.forEach((书)->{
bookCollection.add(book.getName());
});
}

这是不可能的,但您可以使用lambda表达式优化该代码

Set<BookDO> bookSet = [dataSorce]
Collection<String> bookCollection;
if (bookSet != null && bookSet.isEmpty()) {
    bookCollection = new ArrayList<String>();
    bookSet.forEach((book) -> {
        bookCollection.add(book.getName());
    });
}
Set bookSet=[dataSorce]
收藏书籍收藏;
if(bookSet!=null&&bookSet.isEmpty()){
bookCollection=newarraylist();
bookSet.forEach((书)->{
bookCollection.add(book.getName());
});
}

如果Java8-使用lambdas。它们的编译方式不同,有利于JIT——这种构造将更快地发挥作用

Collection<String> bookCollection = bookSet.stream().map(BookDO::getName()).collect(toSet())
当使用以下名称时:

bookMap.values();

如果是Java8,则使用lambdas。它们的编译方式不同,有利于JIT——这种构造将更快地发挥作用

Collection<String> bookCollection = bookSet.stream().map(BookDO::getName()).collect(toSet())
当使用以下名称时:

bookMap.values();

正确的。它只是隐藏在不同语言级别的代码结构下。因此,这是一种“错觉”,即没有循环。:-)没问题。我只是打了个电话,我不太擅长。。。非常感谢,好的。它只是隐藏在不同语言级别的代码结构下。因此,这是一种“错觉”,即没有循环。:-)没问题