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.
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.
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;
}
}
Livre: une classe qui représente des informations sur le livre.
Genre: une classe qui représente un genre. Il a List
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;
}
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;
}
}
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());
}
}
}
}
}
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.
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