【问题标题】:How to iterate through a 2D LinkedHashSet and print its contents?如何遍历 2D LinkedHashSet 并打印其内容?
【发布时间】:2020-04-17 01:23:02
【问题描述】:

我正在为我的程序使用 2D LinkedHashSet。我想知道如何在不这样做的情况下遍历二维 HashSet 并打印其内容:

System.out.println(初始化HashSet的名字)

这是我初始化 2D LinkedHashSet 的代码:

LinkedHashSet<LinkedHashSet<String>> block = new LinkedHashSet<LinkedHashSet<String>>();

【问题讨论】:

  • "System.out.println(name of initialized HashSet)" - 这行有什么问题?
  • 我不想简单地打印 2D LinkedHashSet。我想遍历 2D LinkedHashSet 中的每个元素并打印每个单独的值。类似于如何使用 n^2 循环遍历 2D 数组。我想学习如何遍历 2D LinkedHashSet。

标签: java linkedhashset


【解决方案1】:

您可以为此使用 2 个循环,类似于您使用数组的方式:

for (Set<String> innerSet : block) {
    for (String string : innerSet) {
        System.out.println(string);
    }
}

您还可以使用流来打印每个元素:

block.stream()
        .flatMap(Collection::stream)
        .forEach(System.out::println);

【讨论】:

  • 我有一个关于这个的快速问题。 LinkedHashSet 中的值添加后是否可以编辑?
  • @LavaMaster 您必须删除该值并添加一个新值。但是,您不能在 for 循环中执行此操作,否则您将获得 ConcurrentModificationException。您可以使用流来修改值。但这有点高级。
  • 好吧,这是有道理的。基本上我要做的是检查 2D LinkedHashSet 是否包含特定的字符串。如果字符串已经包含在 2D LinkedHashSet 中,那么我想在 2D LinkedHashSet 中找到它的位置并在那里添加另一个值。
【解决方案2】:

如果想使用功能性解决方案,可以使用以下方法:

Ideone demo

import java.util.LinkedHashSet;

public class Streamify {
    public static void main (final String... args) {
        final LinkedHashSet<LinkedHashSet<String>> block = new LinkedHashSet<>();
        final LinkedHashSet<String> lineOne = new LinkedHashSet<>();
        lineOne.add("Hello");
        lineOne.add("World");
        block.add(lineOne);
        final LinkedHashSet<String> lineTwo = new LinkedHashSet<>();
        lineTwo.add("Hi");
        lineTwo.add("Universe");
        block.add(lineTwo);

        block.forEach(line -> {
            line.forEach(System.out::print);
            System.out.println();
        });
    }
}

【讨论】:

  • 虽然这是实现此目的的一种实用方法,但从技术上讲,它不是基于流的解决方案。 .forEach 是Iterable 接口上的默认方法,与Stream 上的.forEach 不同
  • 确实如此。已更正。
猜你喜欢
  • 2016-10-10
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
相关资源
最近更新 更多