java - 通过使用 Java 8 将元素添加到链表中来比较数组列表和链表

标签 java java-8

我正在比较ArrayListLinkedList。 例如:

ArrayList => {2,4,5}
LinkedList => 1->3->8->7->6
Final Output => 1->2->3->4->5->8->7->6

我需要将数组列表中的元素与链表中的元素进行比较,并且需要插入,以便使用JAVA 8 Streams/Filter/Map/Collections...(我不知道)
不要改变已经存在的元素的顺序(在上面的例子中8->7->6没有改变顺序)

我尝试使用简单的Core java,通过使用两个for循环来比较并插入到链接列表中

    for(int i=0;i<arrayList.size();i++){
         for(int j=0;j<linkedList.size();j++){
              if(linkedList.get(j)>arrayList.get(i)){
                  linkedList.add(j,arrayList.get(i));
                  break;
               }
          }
    }

我需要使用流、映射、过滤器、集合等在 Java 8 中替换代码

最佳答案

您的任务中有一些奇怪的要求。首先,逻辑可以完全用列表来描述,不需要强制一个列表必须是ArrayList,另一个列表必须是LinkedList

要求对任务使用 Stream API 也没什么用,尤其是对于不适合 Stream API 的任务。

如果 LinkedList 的目的是利用其在任意位置进行廉价插入的能力,那么这将更有意义。这个优势只有在使用迭代器时才能发挥出来,对于LinkedList,所有基于索引的访问方法实际上都会降低性能。

这样的解决方案可能看起来像

// prerequisites
List<Integer> arrayList = new ArrayList<>(Arrays.asList(2,4,5));
List<Integer> linkedList = new LinkedList<>(Arrays.asList(1,3,8,7,6));

// changing linkedList
ListIterator<Integer> iterator = linkedList.listIterator();
for(Integer i: arrayList) {
    while(iterator.hasNext()) {
        if(iterator.next() > i) {
            iterator.previous();
            break;
        }
    }
    iterator.add(i);
}

// 1->2->3->4->5->8->7->6
System.out.println(linkedList.stream()
    .map(Object::toString).collect(Collectors.joining("->")));

这是针对 LinkedList 量身定制的,因为它可以避免在插入迭代器已链接的位置时多次迭代。

这个逻辑不能用 Stream API 来表达,至少在不违反它的一些规则的情况下是这样。阅读 Non-interferenceStateless behaviors了解更多详情。

关于java - 通过使用 Java 8 将元素添加到链表中来比较数组列表和链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56571781/

相关文章:

java - 使用indexOf搜索包含某些字母的字符串

java - 使用 JasperReports 导出到 Excel : How to add AutoFilter for columns

java nio NoFilepatternException如何处理文件路径中的空格

java - 使用 lambda 过滤嵌套列表

java - 可以选择在纯函数中调用副作用

java - PaintComponents() 从未被调用

java - WebDriver (Java) - 使用 driver.findElements() 时排除表下的元素

java - 如何将字符串文本添加到 orElse 和 .map

Java 8 不兼容的类型

java-8 - Java 8 - 嵌套 if 在循环内