#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. Андреас — вы действительно правы. Позвольте мне исправить ответ.