Java 将字符串转换为对象参数
该程序是一个文本引擎,接收文本文件并对其进行分析Java 将字符串转换为对象参数,java,Java,该程序是一个文本引擎,接收文本文件并对其进行分析 public Word findFirst(String text) throws SearchableException, ContentNotLoadedException { for(int i = 0;i<words.size();i++) { if(text.equals(words.get(i).text)) { return words.get(i).text;
public Word findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i).text;
}
}
}
这是有问题的单词类
编辑:我无法以任何方式更改方法签名或Word类。实际上,该方法的返回类型是
Word
,因此当您的返回时,它不能从String
转到Word
要解决此问题,请将返回类型更改为String
public String findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i).text;
}
}
}
提示简化循环
foreach
循环
for (Word word : words) {
if (text.equals(word.text)) {
return word.text;
}
}
溪流
return words.stream().map(Word::getText).filter(text::equals).findFirst().orElseThrow(()->new SearchableException());
实际上,该方法的返回类型是Word
,因此当return
给出String
时,它不能从String
转到Word
要解决此问题,请将返回类型更改为String
public String findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i).text;
}
}
}
提示简化循环
foreach
循环
for (Word word : words) {
if (text.equals(word.text)) {
return word.text;
}
}
溪流
return words.stream().map(Word::getText).filter(text::equals).findFirst().orElseThrow(()->new SearchableException());
如果您使用的是java-8,则可以使用此命令返回匹配的第一个字符串:
public String findFirst(String text) throws SearchableException {
return words.stream().filter(i -> i.text.equals(text)).findFirst().get().text;
}
或者,如果要返回整个对象,可以使用:
public Word findFirst(String text) throws SearchableException {
return words.stream().filter(i -> i.text.equals(text)).findFirst().get();
}
如果您使用的是java-8,则可以使用此命令返回匹配的第一个字符串:
public String findFirst(String text) throws SearchableException {
return words.stream().filter(i -> i.text.equals(text)).findFirst().get().text;
}
或者,如果要返回整个对象,可以使用:
public Word findFirst(String text) throws SearchableException {
return words.stream().filter(i -> i.text.equals(text)).findFirst().get();
}
由于无法更改方法签名,因此必须返回Word实例。因此,您不应直接返回Word.text,而应返回Word实例或新实例。由于无法更改方法签名,因此必须返回Word实例。因此,您不应该直接返回Word.text,而应该返回Word实例或一个新实例。只需返回words.get(i)
,而不是返回words.get(i).text
public Word findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i);
}
}
return null;
}
public Word findFirst(字符串文本)引发SearchableException、ContentNotLoadedException{
for(int i=0;i只返回单词。get(i)
而不是返回单词。get(i)。text
public Word findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i);
}
}
return null;
}
public Word findFirst(字符串文本)引发SearchableException、ContentNotLoadedException{
对于(int i=0;ipublic String findFirst…
?为什么不只是“return words.get(i)”而不是“return words.get(i).text”;我发誓我以前试过了,它不起作用,但现在它起作用了…..非常感谢Spara!没关系,兄弟:这在编程世界中会发生很多事情!现在我将发表我的评论作为你的答案:)public String findFirst…
?为什么不直接用“return words.get(i)”而不是“return words.get(i).text”;我发誓我之前试过了,但没用,但现在可以了…..非常感谢Spara!没关系,兄弟:这在编程世界中会发生很多事情!我现在就给你一个答案:)问题不在于如何重写循环,而在于类型转换。我很好奇这种方法是否更有效。对于作者的原始代码,一旦找到匹配项,该方法将返回,但您的实现首先过滤整个列表,然后返回列表中的第一个元素。如果有1000个匹配项,我感觉就像OP的代码w我会运行得更快。这不是筛选器的工作方式。它与OP的代码几乎相同,只是我们使用的是流。一旦筛选器条件的计算结果为true,循环的迭代将停止,相应的实例将返回,原因是findFirst()
。更多信息第二个示例不会编译,因为findFirst()返回一个可选值,而不是一个单词。@DodgyCodeException-很好!错过了.get()
问题不在于如何重写循环,而在于类型转换。我很好奇这种方法是否更有效。对于作者的原始代码,一旦找到匹配项,方法将返回,但您的实现首先过滤整个列表,然后返回列表中的第一个元素。如果有1000个匹配项,我感觉就像OP的一样代码将运行得更快。这不是筛选器的工作方式。它与OP的代码几乎相同,只是我们使用的是流。一旦筛选器条件的计算结果为true,循环的迭代将停止,并且相应的实例将返回findFirst()
。更多信息第二个示例不会编译,因为findFirst()返回一个可选值,而不是一个单词。@DodgyCodeException-很好!错过了.get()
如果找不到文本,它会做什么?当前不会编译,因为不是所有路径都返回值。如果找不到文本,它会做什么?当前不会编译,因为不是所有路径都返回值。流示例迫使您考虑当找不到文本时会发生什么。循环实现如何ons?流示例迫使您考虑当找不到文本时会发生什么。循环实现如何?