Как вывести переменную из объекта, который находится в List?
Есть список "байкеров" типа List. Каждый байкер это объект у которого есть поля типа String: Имя, Размер, Вещь.
Что сделал:
1. Создал списки имен,размеров и вещей, наполнил их, соответственно: именами, размерами, вещами
2. В цикле от 1 до 3, создал 3 новых объекта "biker"
(Human biker = new Human(name,size,item);),
где каждому из списка добавлял имя, размер, вещь.
В этом же цикле поместил каждый объект в список байкеров "bikersList".
//наполняем список с именами
namesList.add("Bill");
namesList.add("Jhon");
namesList.add("Nathan");
//наполняем список размеров одежды
sizesList.add("L");
sizesList.add("S");
sizesList.add("XL");
//наполняем список вещей
itemsList.add("Beer");
itemsList.add("Cards");
itemsList.add("Shotgun");
for(int i=0;i<3;i++){ //создаем ,байкеров в цикле и помещаем их в список
String name = (String) namesList.get(i);//кастуем элемент массива в строковую переменую
String size = (String) sizesList.get(i);//кастуем элемент массива в строковую переменую
String item = (String) itemsList.get(i);//кастуем элемент массива в строковую переменую
Human biker = new Human(name,size,item);
System.out.println("\nИмя байкера: " + biker.getName() + "\nРазмер одежды: " + biker.getSize() + "\nВещь: " +biker.getItem());
bikersList.add(biker);
}
Теперь мне нужно будет в цикле получать имена, размеры, вещи из каждого объеката "байкер",
чтобы найти нужного (нужный размер и вещь).
А вот как это сделать, ума не приложу.
В цикле могу только получить объект "байкер" из списка
System.out.println(bikersList.get(i));
И он выводит белеберду типа "terminator.Human@66a29884", где "terminator" это просто название package.
А как из объекта получить, например переменную "name"? Кстати в классе Human есть метод отдающий имя getName() - он возвращает переменную "name" из объекта.
Ответы (2 шт):
System.out.println(bikersList.get(i).getName());
а чтобы не писал белеберду, надо переопределить метод toString() в вашем классе Human примерно так
public class Human {
//fields, getters, setters
@Override
public String toString() {
return "Biker{ " +
"name: " + name +
"size: " + size +
"item: " + item +
"}";
}
bikersList.get(i) вернет объект байкера из списка, и к этому объекту можно сразу обратится вызвав нужное поле, например: System.out.println(bikersList.get(i).getName());
Вы почти правильно все сделали, но вообще можно делать примерно так как ниже написано :) На мой взгляд это удобнее. Надеюсь более менее понятно, если что то нужно уточнить, пишите, с радостью помогу!
import java.util.Arrays;
import java.util.List;
public class Program {
public static void main(String[] args) {
// 2. Создадим к примеру трех Байкеров
Biker one = new Biker("BikerOne", "XL", "ItemOne");
Biker two = new Biker("BikerTwo", "M", "ItemTwo");
Biker three = new Biker("BikerThree", "L", "ItemThree");
// 3. Добавим их в список, мы же со списком работаетм :)
List<Biker> bikers = Arrays.asList(one, two, three);
// 4. Выведем в консоль весь список (тут нам поможет переопределенный метод toSting())
System.out.println("All Bikers: ");
bikers.forEach(System.out::println);
// 5. А теперь выведем только тех байкеров из списка, у ноторых размер одежды XL
System.out.println("Bikers with XL size: ");
bikers.stream()
.filter(biker -> "XL".equals(biker.getSize))
.forEach(System.out::println);
// 6. А теперь выведем в консоль только имена Байкеров, без остальных полей
System.out.println("Bikers names: ");
bikers.forEach(biker -> System.out.println(biker.getName()));
}
}
// 1. Для начала опишем клас Байкер
class Biker {
// У класса есть поля
private String name;
private String size;
private String item;
// Методы достука к ним
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
// Конструктор
public Biker(String name, String size, String item) {
this.name = name;
this.size = size;
this.item = item;
}
// Для удобства вывода в консоль, переопределяем метод так как нам удобно
@Override
public String toString() {
return "Name: " + name +
" Size: " + size +
" Item: " + item;
}
}
Вывод в консоль:
All Bikers:
Name: BikerOne Size: XL Item: ItemOne
Name: BikerTwo Size: M Item: ItemTwo
Name: BikerThree Size: L Item: ItemThree
Bikers with XL size:
Name: BikerOne Size: XL Item: ItemOne
Bikers names:
BikerOne
BikerTwo
BikerThree