Чистый код с применением весов к значениям таблицы Guava - PullRequest
0 голосов
/ 13 июня 2019

Я трансформирую объект таблицы гуавы, применяя веса.

Метод ввода Тип ниже, где 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);
  }
...