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
being
null
。但这并不是编译器警告的原因。除了原始类型使用导致的编译器警告之外,它非常扭曲,将流收集到集合,毫无理由地坚持
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));
    }

}