Java 集合将字符串转换为字符列表
2022-08-31 13:43:59
我想将包含的字符串转换为字符列表和字符哈希集。我该如何在Java中做到这一点?abc
List<Character> charList = new ArrayList<Character>("abc".toCharArray());
我想将包含的字符串转换为字符列表和字符哈希集。我该如何在Java中做到这一点?abc
List<Character> charList = new ArrayList<Character>("abc".toCharArray());
在Java8中,我想你可以使用流。字符对象列表:
List<Character> chars = str.chars()
.mapToObj(e->(char)e).collect(Collectors.toList());
集合可以以类似的方式获得:
Set<Character> charsSet = str.chars()
.mapToObj(e->(char)e).collect(Collectors.toSet());
您必须使用循环,或者创建一个集合包装器,例如适用于基元 char 数组(或直接处理字符串)。Arrays.asList
List<Character> list = new ArrayList<Character>();
Set<Character> unique = new HashSet<Character>();
for(char c : "abc".toCharArray()) {
list.add(c);
unique.add(c);
}
下面是字符串的类似包装器:Arrays.asList
public List<Character> asList(final String string) {
return new AbstractList<Character>() {
public int size() { return string.length(); }
public Character get(int index) { return string.charAt(index); }
};
}
不过,这是一个不可变的列表。如果需要可变列表,请将其与 :char[]
public List<Character> asList(final char[] string) {
return new AbstractList<Character>() {
public int size() { return string.length; }
public Character get(int index) { return string[index]; }
public Character set(int index, Character newVal) {
char old = string[index];
string[index] = newVal;
return old;
}
};
}
与此类似,您可以为其他基元类型实现此目的。请注意,通常不建议使用此选项,因为对于每次访问,您都会执行装箱和取消装箱操作。
Guava 库包含用于多个基元数组类的类似 List 包装器方法,如 Chars.asList,以及 Lists.characterOf(String) 中 String 的包装器。