[英]How to get all rows from ArrayList<ArrayList<String>> having specific value in specific column?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Delete
{
public static void main(String[] args)
{
List<List<String>> list = new ArrayList<>();
list.add(List.of("A","B","C","R"));
list.add(List.of("E","F","G","F"));
list.add(List.of("A","B","C","D"));
}
}
我想获取第一列中所有具有"A"
的行。 在上面的示例list
,结果应仅在第一行和第三行:
["A", "B", "C", "R"]
["A", "B", "C", "D"]
我更喜欢使用Java 8 stream
的解决方案。
我的另一个问题, 如何在Java中查找2D ArrayList的列的唯一值? ,可能会提供一些其他上下文。
您可以简单地使用以下内容:
List<List<String>> rows = list.stream()
.filter(l -> l.get(0).contains("A"))
.collect(Collectors.toList());
在这里,我们检查列表的第一个索引是否包含“ A”,然后将结果流收集到列表中。
打印List<List<String>> rows
rows.forEach(System.out::println);
[A,B,C,R]
[A B C D]
如果我正确理解您的要求,则不需要信息流。 List.removeIf
方法有点被忽略并且非常有用:
list.removeIf(inner -> inner.size() <= 0 || ! inner.get(0).equals("A"));
对于另一个索引,例如3,您将需要用3
替换两个出现的0
。 您可能希望将整个内容包装在一个方法中。 请注意,这会修改原始列表。 让我们转储修改后的列表以查看结果:
list.forEach(System.out::println);
打印:
[A, B, C, R] [A, B, C, D]
如果您希望将结果显示在新列表中,则可以使用流,也可以使用ArrayList(Collection)
构造函数简单地复制列表,然后在副本上使用以上内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.