【仅供内部供应商使用,不提供对外解答和培训】
...
Code Block | ||||
---|---|---|---|---|
| ||||
import org.bson.Document; import java.util.*; public class ArrayColumnResolver extends AbstractColumnResolver { @Override public boolean accept(Object cell) { return cell instanceof List; } @Override public void expandData(Document doc, List<String> columnNames, List<Integer> waitingColumnsIndex, List<List<Object>> rowDataCollections, List<Object> rowData) { fillRowDataByArray(doc, columnNames, waitingColumnsIndex, rowDataCollections, rowData); } private void fillRowDataByArray(Document doc, List<String> columnNames, List<Integer> waitingColumnsIndex, List<List<Object>> rowDataCollections, List<Object> rowData) { Map<Integer, List<Object>> group = new HashMap<Integer, List<Object>>(); List<Object> standard = null; int maxLength = 0; for (int index : waitingColumnsIndex) { Object data = doc.get(columnNames.get(index)); if (data instanceof List) { List<Object> array = (List<Object>) data; if (standard == null) { standard = array; } maxLength = Math.max(maxLength, array.size()); group.put(index, array); } } if (standard != null) { for (int i = 0; i < maxLength; i++) { List<Object> row = new ArrayList<Object>(Arrays.asList(new Object[rowData.size()])); Collections.copy(row, rowData); for (int index : waitingColumnsIndex) { List<Object> array = group.get(index); row.set(index, array.size() > i ? array.get(i) : null); } rowDataCollections.add(row); } } } } |
Code Block |
---|
<dependence>
<Item key="com.fr.solution.plugin.db.mongo" type="plugin"/>
</dependence>
<extra-core>
<ColumnResolver class="com.fr.plugin.db.mongo.expand.impl.ArrayColumnResolver"/>
</extra-core> |