【发布时间】:2023-02-26 09:05:03
【问题描述】:
我有一个字符串列表,我需要找到所有重复项,如果父母在列表中,还需要删除所有孩子。 我的字符串最多可以有 4 个级别: Level0:“根”,或留空 Level1:“瑞典”、“美国”等... Level2:“瑞典.斯德哥尔摩”、“美国.芝加哥”等... Level3:“瑞典.斯德哥尔摩.索尔纳”、“美国.芝加哥.西塞罗”等...
因此,如果我有一个列表["Sweden", "Sweden", "Sweden.Stockholm.Solna", "America.Chicago", "America.Chicago", "America.Chicago.Cicero"] ,那么只应返回["Sweden", "America.Chicago"]。
如何使用 Java,最好是 java 8 stream API 来做到这一点?
以下 2 种方法可用于检查一个字符串是另一个字符串的父项还是子项:
private boolean isChildOf(String parentPath, String path) {
return path.startsWith(parentPath.isBlank() ? parentPath : parentPath + ".") && !path.equals(parentPath);
}
private boolean isParentOf(String childPath, String path) {
return childPath.startsWith(path + ".") && !path.equals(childPath);
}
【问题讨论】:
-
条目
Sweden.Stockholm.Solna是否有可能出现在Sweden之后? -
是的,字符串列表可以按任何顺序排列。
-
如果其中一个副本是另一个副本的孩子(或父母)会怎样?如果
Sweden.Stockholm.Solna在原始列表中出现两次,那么生成的列表是否只包含America.Chicago? -
我对 OP 要求的理解是它只返回最上面的父级,不管是否有重复项。但是,结果列表不应包含重复项。
-
不,即使 Sweden.Stockholm.Solna 在原始列表中出现两次,结果仍然应该是 ["Sweden", "America.Chicago"]
标签: java string list loops java-stream