我有一个ArrayList(〜900个条目),其中包含用户信息数组:
[swaschit, Sophia Waschitz, Dormant, Inactive, 1/1/2018]
[kolanday, Kyle Olanday, Dormant, Inactive, 1/1/2018]
[npowers, Neil Powers, Assigned, Active, 2/11/2018]
我想从此列表中生成一个仅包含每个对象的第一个元素的数组:
[swaschit, kolanday, npowers, ...]
最有效的方法是什么?
答案 0 :(得分:5)
一种方法是对每个内部数组的第一个元素使用Stream
和map
:
List<String> firstElements = yourList.stream()
.map(x -> x[0].toString()) // you might need toString() here if your array is an Object[]
.collect(Collectors.toList());
如果您想要一个字符串数组:
String[] firstElements = yourList.stream()
.map(x -> x[0].toString()) // you might need toString() here if your array is an Object[]
.toArray(String[]::new);
我还建议您不要使用这样的嵌套数组。您应该使用要存储的属性创建一个类,并为该类创建一个List
。
答案 1 :(得分:1)
由于我认为第一个条目是唯一的(因为它似乎是用户名),所以建议使用Map。这样,您只需列出密钥即可。
HashMap<String,ArrayList<String>> hashmap=new HashMap<>();
或者,您可以简单地创建一个包含该信息的类,以避免需要使用ArrayList,但是我不知道这是否是一个选择。
答案 2 :(得分:0)
如使用适当设计的Object
而非此类异类数据的array
所指出的(猜测它们实际上是String
)。
如果坚持使用现有方式,则只需要分配一个具有原始ArrayList
大小的新数组并进行遍历,以获取所需的列即可。假设ArrayList<String[]> list
int size = list.size();
String[] firstColumn = new String[size];
for (int i = 0; i < list.size(); i++) {
firstColumn[i] = list.get(i)[0];
}
答案 3 :(得分:-1)
我想你可以做
list.stream().map(array -> array[0].toString()).toArray()