001package javax.visrec.ml.data;
002
003import java.util.ArrayList;
004import java.util.Arrays;
005import java.util.List;
006import java.util.stream.Collectors;
007
008/**
009 * Basic implementation of {@link DataSet} interface.
010 * Provides a list of data set items with column info.
011 * 
012 * @param <E> Type of elements in data set
013 * @author Zoran Sevarac
014 */
015public class BasicDataSet<E> implements DataSet<E> {
016
017   /**
018    * List of data set items in this data set
019    */
020    protected List<E> items;  //this should be a data frame map of lists, even better use value types!
021    private Column[] columns; // this should  be a list
022
023    protected BasicDataSet() {
024       items = new ArrayList<>();
025    }
026    
027    /**
028     * Creates an instance of {@link BasicDataSet}
029     * @param cols columns of the data set.
030     */
031    public BasicDataSet(Column[] cols) {
032        this.columns = cols;
033        items = new ArrayList<>();
034    }
035
036    /**
037     * Creates an instance of {@link BasicDataSet}
038     * @param elements items of the data set.
039     */
040    public BasicDataSet(List<E> elements) {
041        this.items = elements;
042    }
043    
044    @Override
045    public List<E> getItems() {
046        return items;
047    }       
048
049        
050    @Override
051    public String[] getTargetNames() {
052        List<String> targetLabels = Arrays.asList(columns).stream()
053                        .filter((col) -> col.isTarget())
054                        .map((col) -> col.getName() )
055                        .collect(Collectors.toList());
056        return targetLabels.toArray(new String[0]);
057    }
058
059    @Override
060    public void setColumnNames(String[] columnNames) {
061        for(int i=0; i<columns.length; i++) {
062             columns[i] = new DataSet.Column(columnNames[i]);
063        }   
064    }
065
066
067    @Override
068    public String[] getColumnNames() {
069        String[] colNames = new String[columns.length];
070        for(int i=0; i<columns.length; i++) {
071             colNames[i] = columns[i].getName();
072        }        
073        return colNames;
074    }
075
076    @Override
077    public DataSet<E>[] split(double... parts) {
078        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
079    }
080
081
082}