원래 주문한 오브젝트를 구성하는 다른 오브젝트 목록의 정보로 보충하려는 주문한 오브젝트 목록이있는 시나리오가 있습니다. 예를 들어 :여분의 세부 사항을 가진 제자리에서 오브젝트 확장하기
그래서class Ledger {
int id;
List<Book> books; // ordered collection of books
List<PricedBook> pricedBooks; //empty originally
}
class PriceLedger {
int id;
Set<PricedBook> booksWithPrices;
}
class Book {
int id;
String text;
}
class PricedBook {
Book book;
double price;
public PricedBook (final Book book, double price) {
this.book = book;
this.price = price;
}
}
가하는 List<Ledger>
과 List<PriceLedger>
을 주어, 나는 List<Book>
이 아니라 증강 가격 정보를 볼 수있는 책의 원래 순서를 존중 밖으로 작성 pricedBooks의 컬렉션을 포함 List<Ledger>
의 출력을 갖고 싶어 해당 (ID = 동일) PriceLedger
public List<Ledger> augment(List<Ledger> input, List<PriceLedger> metadata)
{
List<Ledger> result = new ArrayList<>();
for (Ledger l : input)
{
result.add(augmentLedger(l, metadata));
}
}
public Ledger augmentLedger(Ledger input, List<PriceLedger> metadata)
{
List<PricedBook> result = new ArrayList<>();
List<PricedBook> pricedBooks = metadata.stream().map(PriceLedger::booksWithPrices).flatMap(Collection::stream).collect(Collections.toList());
for (int i = 0; i < input.books.size(); i ++) {
for (int j = 0; j < pricedBooks.size(); j++) {
if (input.books[i] == pricedBooks[j].book) {
result.add(pricedBooks[j]);
}
}
}
Ledger l = new Ledger().setPricedBooks(result)
return l;
}
에서 디자인은 (왜 레저?에서 처음에 책 + pricedBooks을 보유) 분명 올바르지 않습니다 그러나 이것은 단지 더 큰 문제를 설명하는 것입니다. 내가 시도하는 각 책에 대한 모든 메타 데이터 서적을 반복하고 있기 때문에 초 비효율적 인 해결책을 시도한 적이있다.
PricedBook은 매개 변수로 사용하는 대신 –
으로 시작해야합니다. 여기에서 구성을 사용하고 있지만 그렇다고 할 수도 있습니다. 이 연습을 위해서, 나는 명백한 설계 실수를 무시하고 효율적인 솔루션을 찾기 위해 노력하고 싶습니다. –
그리고 지금까지 어떤 시도를 했습니까? 왜 그 보강 방법은 여전히 공백입니까? * 나는 결과물을 원한다. * 욕망이고 그래서 그것을 올려 놓을 정확한 위치가 아니다. – nullpointer