2016-10-04 2 views
-2

Ich bin ein Anfänger in Java, aber ich versuche, die Verwendungen von collection.emptylist() in den Griff zu bekommen. Aus meiner Sicht sollte dies nicht veränderbare Werte zurückgeben.Konnte keine unveränderlichen Daten von collection.emptylist() zurückgeben

ich meinen Code unten enthalten habe:

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(); 
    } 
} 

Und die zweite Klasse:

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)); 
    } 
} 

Und in dem ... empty.file, habe ich folgende

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

Was ich versuche, ist, den Wert als wahr zurückzugeben, wenn die Sammlung den Wert des readline-Puffers enthält. Leider ist die Sammlung gerade leer [].

Meine Frage ist es möglich, dies zu erreichen, ohne die DataFilterer-Klasse zu ändern?

+2

'emptyList' gibt eine Liste ohne Elemente zurück. Wie würden Sie erwarten, dass es Elemente filtert oder behält? – Zircon

+0

Ich bin gespannt: Der erste Satz des Javadoc für ['Collections.emptyList()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#emptyList -) sagt * "Gibt eine leere Liste (unveränderlich) zurück." * Welcher Teil davon ist verwirrend bezüglich des Punktes, an dem die Liste * ist, und * wird immer *, ** leer ** sein? Und da eine leere Liste per Definition nichts enthält, warum würden Sie glauben, dass 'filterByCar (...). Enthält (...)' niemals "falsch" wäre? Oder hast du das Javadoc einfach nicht gelesen? – Andreas

Antwort

2

Collections.emptyList() gibt eine Liste mit null Elementen zurück. Dies bedeutet, dass der Code:

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

in der Tat ist die Überprüfung, ob eine leere Liste readLine enthält, die immer falsch ist.

+0

Danke, ich denke, ich habe das falsche Ende des Sticks in Bezug auf die Sammlungen. Emptylist –

+1

Die Antwort ist teilweise falsch. ['Collections.emptyList()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#emptyList--) gibt eine leere Liste zurück, aber diese Liste * ist unveränderlich * (siehe Javadoc), dh Sie können keine Werte hinzufügen. Es ist also sowohl leer als auch unveränderlich. Der Rest der Antwort ist genau richtig, also stimme trotzdem hoch. :-) – Andreas

+0

Wenn Sie eine Liste unveränderlich machen möchten, können Sie 'Collections.unmodiableList (list)' dafür verwenden. –

Verwandte Themen