blob: c4d4f2613809f84c0812dcd47c271cdddaf2239d [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2020 The University of York.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*********************************************************************/
package org.eclipse.epsilon.pinset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Dataset.
*
* @author Alfonso de la Vega
* @since 2.1
*/
public class Dataset {
private List<String> columnNames;
private List<List<ValueWrapper>> rowsList;
private Map<String, List<ValueWrapper>> colValuesByName;
public Dataset() {
columnNames = new ArrayList<>();
rowsList = new ArrayList<>();
colValuesByName = new HashMap<>();
}
public List<String> getColumnNames() {
return columnNames;
}
public List<List<ValueWrapper>> getRows() {
return rowsList;
}
public List<ValueWrapper> getValuesByColumn(String columnName) {
return colValuesByName.get(columnName);
}
public void setColumnNames(List<String> columnNames) {
this.columnNames = columnNames;
for (String colName : columnNames) {
colValuesByName.put(colName, new ArrayList<ValueWrapper>());
}
}
/**
* Add all column values of a row at once.
* They MUST be given in the same order as the column names were.
*/
public void addColumnValues(List<Object> values) {
List<ValueWrapper> wrappers = new ArrayList<>();
for (Object value : values) {
wrappers.add(new ValueWrapper(value));
}
rowsList.add(wrappers);
Iterator<String> colIt = columnNames.iterator();
Iterator<ValueWrapper> wrappersIt = wrappers.iterator();
while (colIt.hasNext() && wrappersIt.hasNext()) {
String colName = colIt.next();
ValueWrapper wrapper = wrappersIt.next();
colValuesByName.get(colName).add(wrapper);
}
}
public String toString(String separator) {
StringBuilder sb = new StringBuilder();
sb.append(String.join(separator, getColumnNames())).append("\n");
for (List<ValueWrapper> wrappers : getRows()) {
sb.append(
wrappers.stream()
.map(Object::toString)
.collect(Collectors.joining(separator))
)
.append("\n");
}
return sb.toString();
}
}