Не удается вернуть какие-либо неизменяемые данные из collection.emptylist()

#java

#java

Вопрос:

Я новичок в Java, но я пытаюсь разобраться с использованием collection.emptylist(). Насколько я понимаю, это должно возвращать неизменяемые значения.

Я включил свой код ниже:

 package com.carfilter;

import java.io.Reader;
import java.util.Collection;
import java.util.Collections;

public class DataFilterer {
    public static Collection<?> filterByCar(Reader source, String Car) {
        return Collections.emptyList();
    }
}
  

И второй класс:

 public class CarFiltererExample {
    @Test
    public void shouldReturnEmptyCollection_WhenLogFileIsEmpty() throws IOException {
        String readLine = "";
                  try{
                     BufferedReader br = new BufferedReader(openFile("src/test/resources/empty"));
                     while ((readLine = br.readLine()) != null) {

                         assertTrue("true",DataFilterer .filterByCar(openFile("src/test/resources/empty"), "Jaguar").contains(readLine));
                     }
                     br.close();
                  }catch(Exception e){
                     e.printStackTrace();
                  }

    }

    private FileReader openFile(String filename) throws FileNotFoundException {
        return new FileReader(new File(filename));
    }
}
  

И в …empty.file, у меня есть следующее

 Jaguar, 1865, black
Porsche, 1999, blue
Aston Martin, 2000, red
  

Что я пытаюсь сделать, так это вернуть значение как true, если коллекция содержит значение буфера строки чтения. К сожалению, collection просто возвращает empty [] .

Мой вопрос: возможно ли добиться этого без изменения класса DataFilterer?

Комментарии:

1. emptyList возвращает список без элементов. Как вы ожидаете, что он будет фильтровать или сохранять какие-либо элементы?

2. Мне любопытно: в первом предложении javadoc for Collections.emptyList() говорится «Возвращает пустой список (неизменяемый)». Какая часть этого сбивает с толку из-за того, что список является и всегда будет пустым ? И поскольку пустой список по определению ничего не содержит, почему вы считаете, что filterByCar(...).contains(...) этого никогда не будет false ? Или вы просто не читали javadoc?

Ответ №1:

Collections.emptyList() возвращает список с нулевыми элементами. Это означает, что код:

 assertTrue("true",DataFilterer.filterByCar(file, "Jaguar").contains(readLine))
  

фактически проверяет, содержит ли пустой список readLine , что всегда равно false .

Комментарии:

1. Спасибо, думаю, я ошибся в отношении collections.emptylist

2. Ответ частично неверен. Collections.emptyList() возвращает пустой список, но этот список неизменяем (см. javadoc), т. Е. Вы не можете добавлять к нему значения. Таким образом, он одновременно пустой и неизменяемый . Остальная часть ответа на месте, так что голосуйте в любом случае. 🙂

3. Если вы хотите сделать список неизменяемым, вы можете использовать Collections.unmodifiableList(list) для этого.

4. Андреас — вы действительно правы. Позвольте мне исправить ответ.