2016-11-02 8 views
0

Aus einer Datenbank, Tabelle ich eine Spalte auswählen und in einem Array gespeichert. Aber in der Spalte gibt es einen leeren Wert. Jetzt möchte ich diesen leeren Wert aus dem Array entfernen. wie kann ich? HierEntfernen Sie leere Werte aus dem Array

ist der Code, wo ich Array-Liste aus einer Datenbank erhalten:

public ArrayList<ChapterInfo> getAllResult(String tableName){ 

    ArrayList<ChapterInfo> arrayList = new ArrayList<>(); 

    String arg = "select "+tableName+" from "+tableName+";"; 

    Cursor cursor = this.database.rawQuery(arg,null); 

    cursor.moveToFirst(); 

    if (!cursor.isAfterLast()){ 
     do { 
      ChapterInfo chapterInfo = new ChapterInfo(
        cursor.getString(cursor.getColumnIndex(tableName))); 
      arrayList.add(chapterInfo); 

     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 

    return arrayList; 
}` 

-Code funktioniert gut. aber hier ist ein leerer Wert in dieser Tabelle. aber diese leere Zeile ist nicht löschbar, weil es eine andere Spalte gibt, in der die Spalte voll ist.

+0

Nicht sicher 'String arg = "select "+ tablename +" von "+ tablename +";"' ist richtig. Meinst du 'String arg =" select "+ tableColumnName +" von "+ tableName +"; ";'? – petey

+0

Niemals eine Implementierung wie 'ArrayList' in einer' public' Methode zurückgeben, da es sich um ein Implementierungsdetail handelt, das ausgeblendet werden sollte. Stattdessen sollten Sie ein Interface wie eine 'List' oder 'Collection' zurückgeben. –

Antwort

0

Warum überprüfen Sie nicht einfach, ob die Zeichenfolge leer ist oder nicht, und fügen Sie sie dann nur dann zur ArrayList hinzu, wenn die Zeichenfolge nicht leer ist.

String stringTemp = cursor.getString(cursor.getColumnIndex(tableName)) 
    if(stringTemp != null && !stringTemp.isEmpty()) 
     arrayList.add(chapterInfo); 
+0

Zwei kleine Dinge: A) naming ... why stringTemp ... rowContent würde besser sagen, was vor sich geht B) immer immer {geschweifte Klammern} von if/else Blöcken verwenden; auch wenn es nur ein Einzeiler ist. – GhostCat

+0

Der columnName war nicht sichtbar, also war es der Platzhalter, der definitiv ersetzt werden würde. Und ich werde an die Zahnspange denken. Ich vermeide im Allgemeinen für einen Liner, was definitiv keine gute Übung ist. Vielen Dank! –

0

Try arrayList.remove(element); mit dem Element der Index der Arraylist, die Sie

ODER

Sie hinzufügen können eine leere Check, bevor Sie Ihre Daten in Arraylist hinzugefügt wie entfernen möchten:

do { 
    String tableData = cursor.getString(cursor.getColumnIndex(tableName)); 
    if (tableData.trim().isEmpty()){ 
     continue; 
    } 
    else{ 
     ChapterInfo chapterInfo = new ChapterInfo(tableData); 
     arrayList.add(chapterInfo); 
    } 
} while (cursor.moveToNext()); 
0

Sie können Ihre eigenen Predicate dafür erstellen:

package question_40387644; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.function.Predicate; 
import java.util.stream.Collectors; 

public class Test { 

    public static Predicate<String> isNotNullAndNotEmpty = s -> s != null && !s.isEmpty(); 

    public static void main(String[] args) { 
     List<String> someValues = new ArrayList<>(); 
     someValues.add("value A"); 
     someValues.add("value B"); 
     someValues.add(" "); 
     someValues.add(""); 

     System.out.println("List size:"); 
     System.out.println(someValues.size()); 

     System.out.println("Non-empty values:"); 
     someValues.stream().filter(isNotNullAndNotEmpty).forEach(s -> System.out.println("s = " + s)); 


     System.out.println("Empty values:"); 
     System.out.println(someValues.stream().filter(String::isEmpty).collect(Collectors.toList()).size()); 

    } 
} 

Der Ausgang:

List size: 
4 
Non-empty values: 
s = value A 
s = value B 
s = 
Empty values: 
1 
Verwandte Themen