Est-il possible d'appliquer une fonction à une collection à l'aide de Java Goyave?
Je veux appliquer une fonction à une collection, carte, etc, à l'aide de la Goyave.
En gros, j'ai besoin de redimensionner les lignes et les colonnes d'un Table
séparément, de sorte que toutes les lignes et les colonnes sont de taille identique, de faire quelque chose comme ceci:
Table<Integer, Integer, Cell> table = HashBasedTable.create();
Maps.transformValues(table.columnMap(), new ResizeFunction(BlockDimension.WIDTH));
Maps.transformValues(table.rowMap(), new ResizeFunction(BlockDimension.HEIGHT));
public interface Cell {
int getSize(BlockDimension dimension);
void setSize(BlockDimension dimension);
}
J'ai déjà une idée de ce que l' ResizeFunction
devrait être. Cependant, j'ai besoin de appliquer, pas juste de retour d'un Collection
.
OriginalL'auteur Garrett Hall | 2011-09-16
Vous devez vous connecter pour publier un commentaire.
Dans la Goyave, vous ne vous convertissez pas les Listes existantes, mais au lieu d'en créer un nouveau à l'aide de Iterables.transformer:
De sortie:
Ou, si vous n'avez pas besoin d'un
List
et unCollection
allez faire, vous pouvez utiliser une transformée de vue en direct:Ce
Collection
est une vue en direct du sous-jacent, de sorte que les modifications àlist
sera reflété dans ceCollection
.J'ai accepté car c'est correct, même si je continue à composer de Goyave devrait avoir une apply() fonction qui s'applique immédiatement à une collection.
OriginalL'auteur Sean Patrick Floyd
Que sur la création d'une fonction comme ceci:
applyToEach
. Et vous pouvez utiliserFunction<T,?>
comme le type de paramètre, ceci permet d'utiliser des fonctions avec les valeurs de retour, dans lequel vous ne sont tout simplement pas intéressés.OriginalL'auteur Garrett Hall
Sean l'a déjà mentionné que la Goyave de ne pas modifier l'original de la collection, alors vous ne pouvez pas vraiment "appliquer" une fonction sur votre collection.
Il n'est pas clair ce que votre
ResizeFunction
fonction n', si vous avez seulement la modification de la valeur deCell
dansTable<Integer, Integer, Cell>
ensuite, vous pouvez utiliser Les Tables#transformValues()Goyave ne vous permettra pas de modifier les valeurs de
R
etC
dansTable<R, C, V>
(en standardTables
classe), car ceux-ci sont utilisées comme touches, tandis que le retour de ligne ou de colonne de la carte (Table#rowMap()
etTable#columnMap()
) et vous ne pouvez pas transformer ces parce que tous les de Goyave méthodes de transformation et de filtrage de produire des paresseux résultats signifie que la fonction/le prédicat s'applique uniquement lorsque nécessaire que l'objet est utilisé. Ils ne créent pas de copies. En raison de cela, cependant, une transformation peut facilement se casser les exigences d'un Ensemble.Si vous voulez continuer à le faire, alors vous pouvez l'envelopper
Table
objet dans votre propre classe et de fournir une méthodes requises.OriginalL'auteur Premraj
Je pense, serait mieux de la configuration de la table avant de population à la taille appropriée /avoir le nombre approprié de cellules, même si elles sont vides. Quelque chose comme:
Cela permettrait de s'assurer qu'il existe une cellule pour chaque position dans votre table. Tant que vous n'ajoutez cellules dans une ligne, une colonne de positions qui sont à l'intérieur de numRows, numColumns vous permettra de garder un "carré" de la table.
OriginalL'auteur John B