Stocker l'objet Java reçu au format tabulaire dans le modèle approprié

À propos de cet article

Reçoit des objets tabulaires de la base de données en Java J'étais malade en stockant cet objet dans un objet structuré ...

Un mémo de la solution qui se double d'un mémorandum.

introduction

Nom de l'éditeur(Publisher) Genre(Genre) Livres(Book)
Société A la programmation Résumé de base
Société A la programmation Même les singes peuvent comprendre
Société A Shogi Résumé de base
Société A Shogi Même les singes peuvent comprendre
Société B la programmation Résumé de base
Société B Shogi Même les singes peuvent comprendre
Société A la programmation Hors service

J'ai ce genre de données de table de BD

|
|--Société A---------la programmation---------Résumé de base
|           |                    |
|           |                    |----Même les singes peuvent comprendre
|           |                    |
|           |                    |----Hors service
|           |    
|           |        
|           |----Shogi------------Résumé de base
|                                |
|                                 |----Même les singes peuvent comprendre
|    
|    
|--Société B---------la programmation---------Résumé de base
|           |                    
|           |----Shogi---------Résumé de base

Je veux mapper à un objet Java comme celui-ci.

Lorsque vous sélectionnez un éditeur, le genre correspondant apparaît, Lorsque vous sélectionnez un genre, les informations correspondantes sur le livre seront publiées ...

Enfin je veux une liste d'éditeurs.

Objet Java

Objet Java pour obtenir des informations sur la table

BookResultMap


package dto;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class BookResultMap {
	private String publisherName;
	private String genreName;
	private String bookTitle;

	public BookResultMap() {}

	public BookResultMap(String publisherName, String genreName, String bookTitle) {
		this.publisherName = publisherName;
		this.genreName = genreName;
		this.bookTitle = bookTitle;
	}
}

Objet Java qui stocke enfin les données

Livre: une classe qui représente des informations sur le livre. Genre: une classe qui représente un genre. Il a List comme élément. Éditeur: une classe qui représente les informations de l'éditeur. Il a List comme élément.

Book.java


package model;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Book {
	private String bookTitle;
}

Genre.java


package model;

import java.util.List;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Genre {
	private String genreName;
	private List<Book> bookList;
}

Publisher.java


package model;

import java.util.List;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class Publisher {
	private String publisherName;
	private List<Genre> genreList;
}

la mise en oeuvre

DataConvert.java


package logic;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import dto.BookResultMap;
import model.Book;
import model.Genre;
import model.Publisher;

public class DataConvert {
    public static List<Publisher> convertObject(List<BookResultMap> bookResultMaps) {

		/*Une carte qui stocke chaque relation.
		 *La valeur de la carte avec publishName comme clé,
		 *Définir une carte avec genreName comme clé.
		*/
		Map<String, Map<String, List<Book>>> convertMap = new HashMap<>();
		for(int i = 0; i < bookResultMaps.size(); i++) {
			String publisherName = bookResultMaps.get(i).getPublisherName();
			String genreName = bookResultMaps.get(i).getGenreName();
			Book book = new Book();
			book.setBookTitle(bookResultMaps.get(i).getBookTitle());

			/*1.Si publisherName n'existe pas en tant que clé dans convertMap
			 *Créez un HashMap avec publishName comme clé dans convertMap.
			*/
			if(!convertMap.containsKey(publisherName)) {
				convertMap.put(publisherName, new HashMap<>());
			}
			
			/*2.Si geneName est convertMap.get(publisherName)S'il n'existait pas comme clé de
			 * convertMap.get(publisherName)Créez un HashMap avec publishName comme clé.
			*/
			if(!convertMap.get(publisherName).containsKey(genreName)) {
				convertMap.get(publisherName).put(genreName, new ArrayList<>());
			}
			/*1,En faisant le travail de 2
			 *Parce que vous pouvez obtenir le ArrayList dans le genre lié au publisherName
			 *Stockez le livre là-bas.
			 * */
			convertMap.get(publisherName).get(genreName).add(book);
		}

		//Remplacez les informations stockées dans convertMap par un objet Java.
		List<Publisher> publisherList = new ArrayList<>();
		for(String publisherName: convertMap.keySet()) {
			Publisher publisher = new Publisher();
			List<Genre> genreList = new ArrayList<>();
			publisher.setPublisherName(publisherName);
			publisher.setGenreList(genreList);
			publisherList.add(publisher);

			for(String genreName: convertMap.get(publisherName).keySet()) {
				Genre genre = new Genre();
				genre.setGenreName(genreName);
				genre.setBookList(convertMap.get(publisherName).get(genreName));
				genreList.add(genre);
			}
		}

		return publisherList;
	}
}


Vérification

contribution

DataConvert.java


public class DataConvert {

	public static void main(String[] args) {

		//Un objet qui reçoit la forme de la table telle qu'elle provient de la base de données
		List<BookResultMap> bookResultMaps = new ArrayList<>();
		BookResultMap brm1_1_1 = new BookResultMap("Société A", "la programmation", "Résumé de base");
		BookResultMap brm1_1_2 = new BookResultMap("Société A", "la programmation", "Même les singes peuvent comprendre");
		BookResultMap brm1_2_1 = new BookResultMap("Société A", "Shogi", "Résumé de base");
		BookResultMap brm1_2_2 = new BookResultMap("Société A", "Shogi", "Même les singes peuvent comprendre");
		BookResultMap brm2_1_1 = new BookResultMap("Société B", "la programmation", "Résumé de base");
		BookResultMap brm2_2_1 = new BookResultMap("Société B", "Shogi", "Résumé de base");
		BookResultMap brm1_1_3 = new BookResultMap("Société A", "la programmation", "Hors service");
		bookResultMaps.add(brm1_1_1);
		bookResultMaps.add(brm1_1_2);
		bookResultMaps.add(brm1_2_1);
		bookResultMaps.add(brm1_2_2);
		bookResultMaps.add(brm2_1_1);
		bookResultMaps.add(brm2_2_1);
		bookResultMaps.add(brm1_1_3);

		//Conversion de données
		List<Publisher> publisherList = convertObject(bookResultMaps);

		//Vérification
		System.out.println("publisherList taille:" + publisherList.size());
		for(Publisher publisher: publisherList) {
			System.out.println("-------------------"+ publisher.getPublisherName() +"-----------------------");
			System.out.println("taille de genreList:" + publisher.getGenreList().size());
			for(Genre genre: publisher.getGenreList()) {
				System.out.println("-------"+ genre.getGenreName() +"--------");
				System.out.println("bookList taille:"+  + genre.getBookList().size());
				for(Book book: genre.getBookList()) {
					System.out.println("----");
					System.out.println(publisher.getPublisherName());
					System.out.println(genre.getGenreName());
					System.out.println(book.getBookTitle());
				}
			}
		}
	}
}

Résultat de sortie

publisherList taille:2
-------------------Société B-----------------------
taille de genreList:2
-------la programmation--------
bookList taille:1
----
Société B
la programmation
Résumé de base
-------Shogi--------
bookList taille:1
----
Société B
Shogi
Résumé de base
-------------------Société A-----------------------
taille de genreList:2
-------la programmation--------
bookList taille:3
----
Société A
la programmation
Résumé de base
----
Société A
la programmation
Même les singes peuvent comprendre
----
Société A
la programmation
Hors service
-------Shogi--------
bookList taille:2
----
Société A
Shogi
Résumé de base
----
Société A
Shogi
Même les singes peuvent comprendre

J'ai pu associer ces informations à l'éditeur et au genre.

À la fin

Je pense qu'il y a d'autres moyens, mais pour le moment, j'ai écrit ma propre solution. Si vous souhaitez conserver l'ordre des tables, vous pouvez changer HashMap en LinkedHashMap. Je vous serais reconnaissant de bien vouloir me faire savoir s’il existe de meilleures méthodes ou améliorations.

En triant par SQL ou en modifiant la structure, Je veux que vous obteniez les données du tableau sous une forme plus facile à traiter ...

Recommended Posts

Stocker l'objet Java reçu au format tabulaire dans le modèle approprié
Formater XML en Java
twitter4j java Stocke les tweets recherchés dans DB (MySQL).
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Accéder à l'interface réseau avec Java
Implémenter un test piloté par table dans Java 14
Devinez le code de caractère en Java
Spécifiez l'emplacement Java dans eclipse.ini
Décompressez le fichier zip en Java
Analyser l'analyse syntaxique de l'API COTOHA en Java
Appelez la super méthode en Java
Obtenez le résultat de POST en Java
Vérifiez le contenu du magasin de certificats Java
Référence Java à comprendre dans la figure
Essayez d'utiliser l'API Stream en Java
Appelez l'API de notification Windows en Java
À propos du nouveau modèle de version de Java @ Seki Java (20/07/2018)
J'ai essayé le nouveau yuan à Java
Organisation des notes dans la tête (Java-Arrangement)
Java crée un tableau dans un document Word
Essayez d'utiliser l'API au format JSON en Java
Essayez d'appeler le service CORBA sur Java 11+
Date de sortie en Java au format étendu ISO 8601
Quelle est la méthode principale en Java?
Fonction de conversion d'objet de liste immuable (immuable) dans Java8
Comment obtenir la date avec Java
L'histoire reçue par Java SE11 silver
L'histoire de l'écriture de Java dans Emacs
Entrée de la console en Java (comprendre le mécanisme)
J'ai reçu les données du voyage (application agenda) en Java et j'ai essayé de les visualiser # 001