Я трансформирую объект таблицы гуавы, применяя веса.
Метод ввода Тип ниже, где Row и Column некоторые классы.
columnWeightsPerRow : Table<Row, Column, Double>
weightsPerRow : Map<Row, Double>
Вот два способа, которые я уже написал, можете ли вы предложить лучший способ, который более читабелен?
Это первый способ написания кода.
Table<Row, Column, Double> applyWeights(Table<Row, Column, Double> columnWeightsPerRow,
Map<Row, Double> weightsPerRow)
{
Table<Row, Column, Double> rowWeightedColumnWeights =
HashBasedTable.create();
columnWeightsPerRow
.rowMap()
.entrySet()
.stream()
.forEach( columnWeightsPerRowEntry -> columnWeightsPerRowEntry
.getValue().entrySet()
.forEach(weightPerColumn ->
rowWeightedColumnWeights.put(columnWeightsPerRowEntry.getKey(),
weightPerColumn.getKey(),
weightPerColumn.getValue() * weightsPerRow.get(columnWeightsPerRowEntry.getKey()))));
return rowWeightedColumnWeights;
}
Это второй способ написания того же кода.
Table<Row, Column, Double> applyWeights(Table<Row, Column, Double> columnWeightsPerRow,
Map<Row, Double> weightsPerRow)
{
return columnWeightsPerRow
.rowMap()
.entrySet()
.stream()
.collect(HashBasedTable::create,
(table, entry) ->
entry.getValue()
.entrySet()
.stream()
.forEach(columnWeightEntry -> table.put(entry.getKey(),
columnWeightEntry.getKey(),
columnWeightEntry.getValue() * weightsPerRow.get(entry.getKey()))),
HashBasedTable::putAll);
}