Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package local.laer.app.knapsack.support; import com.google.common.base.CharMatcher; import com.google.common.collect.ImmutableMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import local.laer.app.knapsack.domain.Cell; import local.laer.app.knapsack.domain.Item; import local.laer.app.knapsack.domain.Position; import static local.laer.app.knapsack.support.IntFunctions.merge; import static local.laer.app.knapsack.support.OffsetBinaryMatrix.convertToBool; /** * * @author Lars Eriksson (larsq.eriksson@gmail.com) */ public class KnapsackSolution { public KnapsackSolution(Region region, Map<Cell<String>, Item> map) { this.area = region.shape(); this.items = ImmutableMap.copyOf(map); } private final OffsetBinaryMatrix area; private final Map<Cell<String>, Item> items; public Map<Cell<String>, Item> getItems() { return items; } public OffsetBinaryMatrix getArea() { return area; } private OffsetIntMatrix itemMatrix(Position position, Item item) { OffsetIntMatrix m = OffsetIntMatrixParser.valueOf(item.getShape()); return m.translateTo(position); } public OffsetIntMatrix asIntMatrix() { OffsetIntMatrix m = OffsetIntMatrixParser.valueOf(area); m.mutableTransform(IntFunctions.fillWith(0)); items.entrySet().forEach(e -> { OffsetIntMatrix itemM = itemMatrix(e.getKey(), e.getValue()); m.mutableTransform( merge(itemM, (current, other) -> convertToBool(other) ? e.getValue().getId() : current)); }); return m; } }