Java 8 未经检查的呼叫当前检查,为什么?
我的代码:Java 8 未经检查的呼叫当前检查,为什么?,java-8,intellij-inspections,Java 8,Intellij Inspections,我的代码: public static boolean searchLineOnLogFile(String...keywords) { Collection select = null; try (final Stream<String> lines = Files.lines(get(getServerLog().toString()))) { select = CollectionUtils.select(lines.collect(C
public static boolean searchLineOnLogFile(String...keywords)
{
Collection select = null;
try (final Stream<String> lines = Files.lines(get(getServerLog().toString())))
{
select = CollectionUtils.select(lines.collect(Collectors.toCollection(LinkedList::new)),
new Predicate()
{
public boolean evaluate(Object object)
{
String line = (String) object;
return Arrays.stream(keywords).allMatch(line::contains);
}
});
} catch (IOException e)
{
e.printStackTrace();
Assert.fail(e.getMessage());
}
select.stream().findFirst().ifPresent(firstLine -> LogAutomation.info((String)firstLine));
return select.size() > 0;
}
select.stream().findFirst().ifPresent(firstLine -> log.info((String)firstLine));
你可以写:
optional.ifPresent(val->doSomething(val));
或者,如果您愿意:
optional.ifPresent(this::doSomething);
该警告是因为
select
可以为空。可以通过
正如Butiri所回答的,您可以使用可选的。 您还可以使用对象 对于第二种情况,如果为空,则可以定义默认值。 例如:
公共类主{
公共静态void main(字符串[]args){
集合select=null;
if(Math.random()>0.5){
select=Arrays.asList(1,2,3);
}
Objects.requireNonNullElse(select,Collections.singletonList(99)).stream()。
findFirst()。
如果存在(e->System.out.println(“发现:+e”);
}
}
您能否分享您收到的确切警告?我猜问题出在(String)firstLine
中,警告与可选方法无关显示select
的声明。可能是因为您的select
变量已使用声明。正如我所怀疑的,select
具有原始类型。将声明更改为集合选择
。其他人指出的仍然是正确的,您的异常处理…需要改进,因为捕获异常后,您将继续执行select
beingnull
。但这并不是编译器警告的原因。除了原始类型使用导致的编译器警告之外,它非常扭曲,将流收集到集合,毫无理由地坚持LinkedList
,然后使用第三方库方法CollectionUtils。选择,最终再次获取流。您可以直接筛选原始流:可选o=lines.filter(line->Arrays.stream(keywords).allMatch(line::contains)).findFirst();o、 ifPresent(firstLine->LogAutomation.info((字符串)firstLine));返回o.isPresent()代码>。不需要收集到LinkedList
,也不需要第三方库。您的回答是正确的,select
可以null
,这可能会导致问题。但这并不是未经检查的警告的原因。除此之外,在可选集合上调用.stream()
需要Java 9,与在包含的集合上调用stream()
不同。
optional.ifPresent(this::doSomething);
Optional.ofNullable(select).stream().findFirst().ifPresent(firstLine -> LogAutomation.info((String) firstLine));
public class Main {
public static void main(String[] args) {
Collection<Integer> select = null;
if (Math.random() > 0.5) {
select = Arrays.asList(1, 2, 3);
}
Objects.requireNonNullElse(select, Collections.singletonList(99)).stream().
findFirst().
ifPresent(e -> System.out.println("found: " + e));
}
}