У меня есть разные типы данных (это может быть String, Integer...). Вот простой пример:
public static void main(String[] args) {
before("one");
}
public static void before(Object... datas ) {
go(1, datas);
}
public static void go(Object...params ) {
System.out.println(MessageFormat.format("{0} is the same as {1}", params));
}
Я хочу это : "1 is the same as one" но получил это "1 is the same as [Ljava.lang.Object;@4554617c"
Кажется, проблема в моих параметрах, мне нужен такой массив [1, «один»], но вместо этого «один» инкапсулируется внутри массива. Хотелось бы чего-нибудь "плоского". Есть идеи ?
Спасибо
да, я передаю в go() массив: array[0]=1 (целое число) et array[1]=вложенный массив (содержащий значение «один»). В основном я хочу сгладить это, чтобы получить один массив, объединяющий значения из вложенного массива. Не знаю, понимаю ли я себя. Что бы я хотел: массив [0] = 1 и массив [1] = "один"




то, что вы передаете go, на самом деле 1 и массив, содержащий «один», поэтому вы получаете это [Ljava.lang.Object;@4554617c". Вы можете изменить свой метод на:
public static void before(Object... datas) {
Object[] arr = Stream.concat(Stream.of(1), Arrays.stream(datas))
.toArray();
go(arr);
}
@AntonBoarf, каков ваш ожидаемый результат?
[1, [Ljava.lang.Object;@7852e922] совпадает с {1}
Спасибо, это работает. Думал об использовании метода flatMap()
из вашего примера отформатированное сообщение всегда содержит 2 параметра, поэтому вы можете упростить его следующим образом:
public static void main(String[] args) {
before("one");
}
public static void go(Object...params) {
System.out.println(MessageFormat.format("{0} is the same as {1}", params));
}
public static void before(Object data) {
go(1, data);
}
вы должны изменить параметры метода
before. вот так:before(1,"one");тогда будет работать корректно