java 如何将一个列表值拆分为元素

idfiyjo8  于 2023-05-21  发布在  Java
关注(0)|答案(3)|浏览(143)

如何从下面的列表中获取元素:

List<String> list = new ArrayList<>();

List<String> getRoles = 
buildRolesList(list, role).stream()
    .map(String::trim)
    .map(String::toLowerCase)
    .map(str->str.replace ( "[","" ))
    .map(str->str.replace ( "]","" ))
    .collect( Collectors.toCollection ( ArrayList::new ) );

getRoles = "[admin, user]"---这是我得到的列表,但需要的列表是["admin","user"]拆分的
如何实现列表值为[0--->"admin",1--->"user"]
上面的结果是大小为1的,但希望它是大小为2的

unftdfkk

unftdfkk1#

假设你有一个像"[admin, user]"这样的字符串列表。然后你做得差不多了,只是忘了把一个字符串拆分成各个角色。

public static void main(String... args) {
    List<String> list = List.of("[admin, user]",
                                "[owner, developer]");

    Set<String> roles = getRoles(list);
    System.out.println(roles);  // [owner, admin, developer, user]
}

public static Set<String> getRoles(List<String> list) {
    return list.stream()
               .map(String::toLowerCase)
               .map(Foo::getRoles)
               .flatMap(Set::stream)
               .collect(Collectors.toSet());
}

private static Set<String> getRoles(String str) {
    return Stream.of(str)
                 .map(s -> s.replace("[", ""))
                 .map(s -> s.replace("]", ""))
                 .map(s -> s.split("\\s*,\\s*"))
                 .flatMap(Arrays::stream)
                 .collect(Collectors.toSet());
}
du7egjpx

du7egjpx2#

如何将一个列表值拆分为元素
看起来您有一个成对的角色列表,并希望将其分解为大小为2的单独列表。所以你不能返回一个所有角色的List<String>,然后成对复制吗?下面是它的工作原理。

List<List<String>> roles = List.of("admin", "user", 
                                   "steno","typist"));

List<List<String>> roleLists = new ArrayList<>();

if (roles.size()%2 != 0) {
     System.out.println("Roles must be in pairs");
} else {
     for (int i = 0; i < roles.size(); i+=2) {
        roleLists.add(new ArrayList<>(List.of(roles.get(i),roles.get(i+1))));
     }
}

然后,当你得到列表的列表时,你可以按如下方式检索值:

for(List<String> lst : roles) {
    System.out.println("List -> " + lst);
    for(int i = 0; i < lst.size(); i++) {
         System.out.printf("   %d -> %s%n", i, lst.get(i));
    }
}

印刷品

List -> [admin, user]
   0 -> admin
   1 -> user
List -> [steno, typist]
   0 -> steno
   1 -> typist

否则,只需执行以下操作:

String s = "[admin, user]";

String[] result = s.replaceAll("[\\[\\]\\s+]+","").split(",");
for (int i = 0; i < result.length; i++) {
    System.out.printf("%d -> %s%n", i, result[i]);
}

印刷品

0 -> admin
1 -> user
enyaitl3

enyaitl33#

使用正则表达式删除所有"[", "]"字符和空格。然后用“,”分割。

String str = "[admin, user]";
System.out.println(Arrays.toString(str.replaceAll("\\[|\\]|\s+", "").split(", ")));

相关问题