Un KeyValuePair en Java
Je suis à la recherche d'un KeyValuePair classe en Java.
Depuis java.util lourdement utilise des interfaces n'est pas mise en œuvre concrète, seulement la Carte.Interface de saisie.
Est-il canonique de la mise en œuvre, je peux importer?
Il est l'un de ces "plombiers de la programmation des classes" je déteste mettre en œuvre 100x fois.
- Je le recommande contre l'utilisation d'un générique KeyValuePair classe. Beaucoup mieux à définir un domaine spécifique de la classe avec le plus instructif des accesseurs (par exemple getProductId(), getProductPrice()).
- Je suis en désaccord. Nous n'utilisons pas de domaine spécifique
Map
ouList
classes, pourquoi devrait-il en être autrement? Un KeyValuePair est juste une Carte avec une entrée. - Juste point, mais je pense que le concept générique d'une Paire est plus facilement ouverte à des abus que le passage de l'Collections autour. Par exemple, si quelqu'un veut retourner deux valeurs à partir d'une méthode, il est tentant de retourner une Paire<X,Y> mais en général, cela est révélateur d'une conception sous-jacente du problème (par exemple, Pourquoi ne pas en X et Y unifiée en quelque sorte de toute façon dans le modèle de domaine si ils sont intrinsèquement liés?)
- Parce que ce n'est pas
<X,Y>
, c'est<Key,Value>
. Il n'est pas de demander de l'arbitraire d'unPair
type, il demande à unKeyValuePair
type. - Malgré cela, je préfère les passer autour d'une seule instance de l'objet dans mon code, potentiellement avec un getKey() la méthode définie; par exemple, je préfère: processProduct(Produit) processProduct(KeyValuePair<Integer, Produit>) où le nombre Entier est l'ID de produit. Je suis d'accord que KeyValuePair (c'est à dire la Carte.Entry) ou même un générique Paire est utile dans une logique de la méthode, mais je ne l'aime pas de "fuite" comme un type de retour ou être fourni comme un paramètre de méthode; par exemple, je n'ai jamais passer autour de la Carte.De l'entrée.
Vous devez vous connecter pour publier un commentaire.
La documentation AbstractMap.SimpleEntry est générique et peut être utile.
List<AbstractMap.SimpleEntry>
correct?java.util.Map.Entry<K, V>
devrait être utilisé dans le but de programmer des interfaces. Donc, vous devriez être en utilisantList<Map.Entry<K, V>>
, par exemple, pour la même raison, vous ne l'utilisezArrayList<AbstractMap.SimpleEntry<K,V>>
dans la consommation de code. Le code que crée l'instance doit utiliser un béton de classe, évidemment.Android les programmeurs pourraient utiliser BasicNameValuePair
Mise à jour:
BasicNameValuePair est maintenant obsolète API (22).
Utilisation Paire à la place.
Exemple d'utilisation:
Pair
vient de javafx.util, qui introduit une dépendance sur JavaFX, comme OracleJDK, OpenJDK ou OpenJFX. Si vous utilisez l'un de ces temps d'exécution Java puis une grande, mais il n'y a pas moyen trivial pour l'ajouter à une installation JRE avec un Maven ou Gradle de dépendance.La Paire catégorie de Commons Lang qui pourraient vous aider:
Bien sûr, vous devez inclure commons-lang.
android.util.Pair
java.util.AbstractMap.SimpleEntry
- ce qui rend les communes Paire redondante.Utilisation de javafx.util.Paire est suffisant pour la plupart des simples Clé-Valeur appariements entre les deux types qui peuvent être instanciées.
J'aime utiliser
Propriétés
Exemple:
Si vous êtes familier avec une table de hachage, vous sera très familier avec ce déjà
Mon préféré est
Tout ce que vous avez à faire est de spécifier le type de données de la clé pour le Type 1 et le type de données pour la valeur de Type2. C'est la plus commune de la clé-valeur de l'objet que j'ai vu en Java.
https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
Map.Entry<K,V>
mais je voulais un cas plus général. Ce type peut être instanciée directement, voir cette réponse: stackoverflow.com/a/3110563/3251909J'ai publié un
NameValuePair
classe dans GlobalMentor de base de la bibliothèque, disponible dans Maven. C'est un projet en cours avec une longue histoire, donc veuillez soumettre toute demande de modifications ou améliorations.