Как связать два списка?
Как связать два списка, чтобы если в этом основном списке удалить объект условный производитель товаров, то удалить все данные производителя из другого списка [[pr1, zzz, 25, 50, pr2, xxx, 26, 75, pr3 , cccc, 27, 100], [a1, tttt, a2, yyyyy, a3, uuuuu]] во втором списке есть производители, то есть а1, а2, а3 и город производства (буду делать по аналогии).А если удалить а3, например, то удалить пр3, cccc, 27, 100.
Scanner scanner = new Scanner(System.in);
static List<Object> listSouvenirs = new ArrayList<>();
static List<Object> listManufacturer = new ArrayList<>();
static List<Object> list = new ArrayList<>(); //
public static void listAddSouvenirs(Souvenirs s){
listSouvenirs.add(s.getName());
listSouvenirs.add(s.getInfo());
listSouvenirs.add(s.getDate());
listSouvenirs.add(s.getPrice());
}
public static void listAddManufacturer(Manufacturer m) {
listManufacturer.add(m.getName());
listManufacturer.add(m.getCountry());
}
public int menu1() {
boolean b;
do {
System.out.println("Enter product name, manufacturer information, date of manufacture and price");
String prodStr1 = scanner.nextLine();
String[] souvenirs = prodStr1.split(" ");
Menu.listAddSouvenirs(new Souvenirs(souvenirs[0], souvenirs[1], souvenirs[2], souvenirs[3]));
System.out.println("Enter manufacturer's name, manufacturer's city");
String prodStr2 = scanner.nextLine();
String[] manufacturer = prodStr2.split(" ");
Menu.listAddManufacturer(new Manufacturer(manufacturer[0], manufacturer[1]));
System.out.println("Enter Y or y to continue");
String check = scanner.nextLine().toLowerCase();
b = check.contains("y");
} while (b);
return 1;
}
}
Maybe something else to read, tell me in this direction
Ответы (1 шт):
Если я правильно понял, у вас маппинг идет по индексу, тогда решение в лоб будет удаление по индексам, высчитывая их из позиции для удаления.
int position = listManufacturer.indexOf("a3");
listManufacturer.remove(position + 1);
listManufacturer.remove(position);
int position2 = position / 2 * 4;
listSouvenirs.remove(position2 + 3);
listSouvenirs.remove(position2 + 2);
listSouvenirs.remove(position2 + 1);
listSouvenirs.remove(position2);
Но по хорошему в Java нужно работать с объектами и обертками над ними, которые будут делать всю работу за вас, а не линейно обрабатывать код на низком уровне. Чем сложнее управление, тем проще это будет делать через классы. Особенно когда у вас данные будут уже не 1 производитель к 1 сувениру как сейчас.
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.*;
public class Menu {
@Data
@AllArgsConstructor
public class Souvenirs {
String name;
String info;
String date;
String price;
}
@Data
@AllArgsConstructor
public class Manufacturer {
String name;
String country;
}
public class Helper {
private List<Souvenirs> souvenirs = new ArrayList<>();
private List<Manufacturer> manufacturers = new ArrayList<>();
public void deleteManufacturer(Manufacturer manufacturer) {
int index = manufacturers.indexOf(manufacturer);
manufacturers.remove(index);
souvenirs.remove(index);
}
}
public List<Object> getSouvenirsFlatList(List<Souvenirs> souvenirs){
List<Object> result = new ArrayList<>();
for(var souvenir : souvenirs) {
result.add(souvenir.name);
result.add(souvenir.info);
result.add(souvenir.date);
result.add(souvenir.price);
}
return result;
}
public List<Object> getManufaturersFlatList(List<Manufacturer> manufacturers){
List<Object> result = new ArrayList<>();
for(var souvenir : manufacturers) {
result.add(souvenir.name);
result.add(souvenir.country);
}
return result;
}
Scanner scanner = new Scanner(System.in);
static List<Object> listSouvenirs = new ArrayList<>();
static List<Object> listManufacturer = new ArrayList<>();
public void menu1() {
Helper helper = new Helper();
boolean b;
do {
System.out.println("Enter product name, manufacturer information, date of manufacture and price");
String prodStr1 = scanner.nextLine();
String[] souvenirs = prodStr1.split(" ");
helper.souvenirs.add(new Souvenirs(souvenirs[0], souvenirs[1], souvenirs[2], souvenirs[3]);
System.out.println("Enter manufacturer's name, manufacturer's city");
String prodStr2 = scanner.nextLine();
String[] manufacturer = prodStr2.split(" ");
helper.manufacturers.add(new Manufacturer(manufacturer[0], manufacturer[1]));
System.out.println("Enter Y or y to continue");
String check = scanner.nextLine().toLowerCase();
b = check.contains("y");
} while (b);
// Удаление
Manufacturer manufacturer = helper.manufacturers.stream().filter(x -> x.name.equals("a3")).findFirst().get();
helper.deleteManufacturer(manufacturer);
// Заполнение свойств можно сделать когда угодно и обновить данные
listSouvenirs = getSouvenirsFlatList(helper.souvenirs);
listManufacturer = getManufaturersFlatList(helper.manufacturers);
}
public static void main(String[] args) {
new Menu().menu1();
}
}