Java 错误:找不到符号-stream().toArray(字符串[]:::新建);

Java 错误:找不到符号-stream().toArray(字符串[]:::新建);,java,arrays,arraylist,Java,Arrays,Arraylist,我是Java新手,我得到了锻炼: 给定一个字符串数组,返回另一个包含其所有最长字符串的数组 所以我写了代码: String[] allLongestStrings(String[] inputArray) { int longest = 0; for (int i = 0; i < inputArray.length; i++) { if (inputArray[i].length() > longest) { longest = inputA

我是Java新手,我得到了锻炼: 给定一个字符串数组,返回另一个包含其所有最长字符串的数组

所以我写了代码:

String[] allLongestStrings(String[] inputArray) {

int longest = 0;

for (int i = 0; i < inputArray.length; i++) 
{
    if (inputArray[i].length() > longest) 
    {
        longest = inputArray[i].length();
    }
ArrayList<String> list = new ArrayList<String>();
for(int j = 0; j < inputArray.length; j++)
{
    String word = inputArray[i];
    if(word.length() == longest) list.add(word);
}
}
String[] strings = list.stream().toArray(String[]::new);
return strings; }
有什么建议吗?我不需要解决办法,只是一个提示


谢谢。

这里有范围问题

列表已在for循环内部声明,您正试图在外部访问它

请记住,作用域仅限于块(
{}
)。如果您已经缩进了代码,您可以很容易地看到这一点

       for (int i = 0; i < inputArray.length; i++) {
            if (inputArray[i].length() > longest) {
                longest = inputArray[i].length();
            }
            ArrayList<String> list = new ArrayList<String>();
            for (int j = 0; j < inputArray.length; j++) {
                String word = inputArray[i];
                if (word.length() == longest)
                    list.add(word);
            }
        }
        String[] strings = list.stream().toArray(String[]::new);
for(int i=0;i最长){
最长=输入阵列[i]。长度();
}
ArrayList=新建ArrayList();
for(int j=0;j
只要把它移到顶部,你就可以访问它

String[] allLongestStrings(String[] inputArray) {

        int longest = 0;

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

        for (int i = 0; i < inputArray.length; i++) {
            if (inputArray[i].length() > longest) {
                longest = inputArray[i].length();
            }
            for (int j = 0; j < inputArray.length; j++) {
                String word = inputArray[i];
                if (word.length() == longest)
                    list.add(word);
            }
        }
        String[] strings = list.stream().toArray(String[]::new);
        return strings;
    }
String[]allLongestStrings(String[]inputArray){
int=0;
ArrayList=新建ArrayList();
for(int i=0;i最长){
最长=输入阵列[i]。长度();
}
for(int j=0;j
您的列表声明位于循环内部,因此在外部不可见。您需要将列表声明移到循环之外

   String[] allLongestStrings(String[] inputArray) {

        int longest = 0;

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

        for (int i = 0; i < inputArray.length; i++) {
        if (inputArray[i].length() > longest) {
            longest = inputArray[i].length();
        }
        for (int j = 0; j < inputArray.length; j++) { 
            list.clean();// if there is longer String, remove previous results 
            String word = inputArray[i];
            if (word.length() == longest)
                list.add(word);
        }
    }
    String[] strings = list.stream().toArray(String[]::new);
    return strings;
}

正如其他人所提到的,您正面临一个范围问题,因此需要在循环之外声明
ArrayList

然而,还有另一个问题;因此,为了找到特定大小的所有最长字符串,您需要将嵌套循环删除为两个单独的不同循环,如下所示:

String[] allLongestStrings(String[] inputArray) {

        int longest = 0;
        ArrayList<String> list = new ArrayList<>();

        for (int i = 0; i < inputArray.length; i++)
        {
            if (inputArray[i].length() > longest)
            {
                longest = inputArray[i].length();
            }

        }


        for(int j = 0; j < inputArray.length; j++)
        {
            String word = inputArray[j];
            if(word.length() == longest) list.add(word);
        }

        String[] strings = list.toArray(new String[0]);
        return strings;
}
String[]allLongestStrings(String[]inputArray){
int=0;
ArrayList=新建ArrayList();
for(int i=0;i最长)
{
最长=输入阵列[i]。长度();
}
}
for(int j=0;j
这是必要的,因为您在文章中展示的代码在与元素进行比较之前没有遍历整个数组以查找最长的字符串,从而导致错误的结果


另外,无需从列表中创建
,即可将其转换为数组,只需执行
list.toArray(新字符串[0])

您到底在尝试什么
list.stream().toArray(String[]::new)
?我无法返回ArrayList,它必须是String[]Array正确插入您的代码,问题将显而易见。你不缩进是在打自己的脚。您无法再找出变量的结构和范围。出现此错误的主要原因是缩进和常规代码格式不好。。这是一个范围问题,如果格式正确,它会更明显。为了完成,错误意味着未声明
列表
(在该行),与
流()无关。toArray…
,如标题所示)正确。。你赢了我!非常感谢。新手的错误。
 String[] allLongestStrings(String[] inputArray) {

    int longest = Arrays.stream(inputArray)
            .map(String::length)
            .max(Integer::compareTo).orElse(0);

    return Arrays.stream(inputArray)
            .filter( v-> v.length() == longest)
            .toArray(String[]::new);
}
String[] allLongestStrings(String[] inputArray) {

        int longest = 0;
        ArrayList<String> list = new ArrayList<>();

        for (int i = 0; i < inputArray.length; i++)
        {
            if (inputArray[i].length() > longest)
            {
                longest = inputArray[i].length();
            }

        }


        for(int j = 0; j < inputArray.length; j++)
        {
            String word = inputArray[j];
            if(word.length() == longest) list.add(word);
        }

        String[] strings = list.toArray(new String[0]);
        return strings;
}