На самом деле есть способ без кастования каждого элемента вручную (он все еще уродлив, хотя ..)
//start with an arraylist of unknown generic type
ArrayList <Object> obj = getData();
//Make an array from it(basically the same as looping over the list
// and casting it to the real type of the list entries)
Object[] objArr = obj.toArray();
//Check if the array is not empty and if the componentType of the
//array can hold an instance of the class Person
if(objArr.length>0
&& objArr.getClass().getComponentType().isAssignableFrom(Person.class)) {
// do sth....
}
Это не должно давать никаких предупреждений.
Вы можете использовать он выглядит следующим образом:
private boolean isArrayOfType(Object[] array,Class<?> aClass) {
return array.length > 0
&& array.getClass().getComponentType().isAssignableFrom(aClass);
}
Object[] personArr = getData().toArray();
if(isArrayOfType(personArr,Person.class) {
//Do anything...
}
Что не будет работать:
// -> This won't work, sry!
ArrayList<Person> personArrayList = Arrays.asList((Person[])personArr);
Если ваша таблица является источником, и если NumberColumn имеет тип номера, это будет работать:
= Table.Group(Source, {"LetterColumn"}, {{"Column", each Text.Combine(List.Transform(_[NumberColumn], (x) => Number.ToText(x)), ","), type text}})
Table.Group
выполняет группу по операции, которая создает таблицу, состоящую из всех строк с одинаковым значением в LetterColumn. _[NumberColumn]
дает список значений в столбце NumberColumn в этой новой таблице. Часть List.Transform
превращает числа в текстовые значения, а Text.Combine
объединяет эти числа вместе с запятой, разделяющей каждое значение.
Если вам нужны окружающие кавычки, вы можете сделать это:
= Table.Group(Source, {"LetterColumn"}, {{"Column", each """" & Text.Combine(List.Transform(_[NumberColumn], (x) => Number.ToText(x)), ",") & """", type text}})
""""
представляет символ, а & amp; комбинирует два текстовых значения.