【问题标题】:List<Object> into CharSequence[]List<Object> 到 CharSequence[]
【发布时间】:2017-05-09 22:15:56
【问题描述】:

我有一份这份清单:

public List <Book> bookList = new ArrayList <>();

您可以使用 Book 对象引用上的 .title 获取 Book 对象的标题(这是一个 CharSequence)。

我想要做的是声明一个方法,它将书籍列表作为输入参数并返回包含书籍标签的 CharSequence[]。 bookList 是按字母排序的,如果可能的话,我想保留它。

编辑:标题也是 CharSequence。

【问题讨论】:

  • 你试过了吗?
  • 你的尝试在哪里? String 实现 CharSequence
  • 需求列表不是问题。此外,尚不清楚 char 序列的结构应该是什么。你应该尽可能地编写一个满足你要求的程序,然后你可以询问你在程序中遇到的困难。
  • 我试着写了一些方法,但是出错了。

标签: java


【解决方案1】:

将此用于String.valueOf()

public CharSequence[] toCharSequenceArray(List<?> objects) {
    return objects.stream().map(String::valueOf).toArray(CharSequence[]::new);
}

或者这个Book.title

public CharSequence[] toCharSequenceArray(List<Book> books) {
    return books.stream().map(b -> b.title).toArray(CharSequence[]::new);
}

Java7 中的后者(使用迭代器):

CharSequence[] bookTitles = new CharSequence[books.size()];
int index = 0;
for (Book book : books) {
    bookTitles[index++] = book.title;
}
return bookTitles;

或者一个老式的for循环:

CharSequence[] bookTitles = new CharSequence[books.size()];
for (int i = 0; i < bookTitles.length; i++) {
    bookTitles[i] = books.get(i).title;
}
return bookTitles;

【讨论】:

  • String::valueOf 可能包含除标题之外的其他数据,具体取决于 Book.toString 的作用
  • @f1sh 是的,他一直在改变问题。
  • 问题的第一个版本已经说明“您可以使用 Book 对象引用上的 .title 获取 Book 对象的标题(这是一个字符串)。”
  • 我讨厌 StackOverflow。三个正确答案,但没有人可以对另一个答案投赞成票,因为这会扼杀自己的答案(反过来,每个人都认为这是最聪明的答案)。
  • 是的,就是这样。接受我的投票作为和平协议。
【解决方案2】:

试试:

bookList.stream().map(b -> ((CharSequence)b.title)).collect(Collectors.toList()).toArray();

或者,就像 steffen 在他的回答中所做的那样,在最后使用数组收集器。一般来说,我建议使用Lists 而不是数组。

【讨论】:

    【解决方案3】:

    如果您有Book 对象的列表,您可以使用Java 8 的stream 流式传输元素,map 每个元素到相应的标题,collect 它到一个数组,例如:

    List<Book> books = new ArrayList<>();
    CharSequence[] names = books.stream()
        .map(b -> (CharSequence)b.title)
        .toArray(CharSequence[]::new);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2018-09-22
      • 2021-12-15
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多