Java 对字符串进行流式处理和筛选以获取char[]数组

Java 对字符串进行流式处理和筛选以获取char[]数组,java,Java,我正试图使用下面这样的方法,通过字母数字字符流式传输和过滤给定的字符串 List<String> alphanumeric = Arrays.asList("012345689abcdefhijklmnopqrstuvwxyz".split("")); char[] ssplit = Arrays.asList(s.toLowerCase().split("")) .stream() .filter(alphanum

我正试图使用下面这样的方法,通过字母数字字符流式传输和过滤给定的字符串

    List<String> alphanumeric = Arrays.asList("012345689abcdefhijklmnopqrstuvwxyz".split(""));

    char[] ssplit =  Arrays.asList(s.toLowerCase().split(""))
            .stream()
            .filter(alphanumeric::contains)
            .map(i -> i.charAt(0))
            .toArray(new char[0]);
List alphanumeric=Arrays.asList(“012345689abcdefhijklmnopqrstuvwxyz”.split(“”));
char[]ssplit=Arrays.asList(s.toLowerCase().split(“”)
.stream()
.filter(字母数字::包含)
.map(i->i.charAt(0))
.toArray(新字符[0]);
但我得到的错误如下:

error: method toArray in interface Stream<T> cannot be applied to given types;
            .toArray(new char[0]);
            ^
  required: IntFunction<A[]>
  found: char[]
  reason: cannot infer type-variable(s) A
错误:接口流中的toArray方法无法应用于给定类型;
.toArray(新字符[0]);
^
必需:IntFunction
找到:char[]
原因:无法推断类型变量A

我做错了什么?这个错误消息对我来说毫无意义

我不知道你为什么要使用streams

请尝试以下操作:

String notLowerAlphaNum = "[^a-z0-9]";

char[] ssplit = s.toLowerCase().replaceAll(notLowerAlphaNum, "").toCharArray();

在您的情况下,正则表达式可能是正确的解决方案,或者将数组更改为
字符[]
的类型。但是,如果需要字符数组,可以执行以下操作:

char[] ssplit =  Arrays.asList(s.toLowerCase().split(""))
        .stream()
        .filter(alphanumeric::contains)
        .collect(Collectors.joining())
        .toCharArray();

您不能执行
.toArray(新字符[0])?这就是我所困惑的你有一条流。因此,它需要一个int函数,即一个以int为参数的函数,该函数创建一个java.lang.Character数组。相反,您正在传递一个char[]。您需要传递的是
字符[]:::new
。但这将允许您创建一个字符[],而不是一个字符[]。事实上,我认为这不适用于
char[]
;将返回类型更改为
Character[]
toArray
。toArray(Character[]::new)
几乎是一样的。这很有意义,也很有效,似乎我得到了答案。编写
s.chars()
以获得字符流更简单。