Java如何从仅包含目标元素的对象数组中创建字符串数组

问题描述 投票:-1回答:1

我正在尝试创建一个方法,该方法返回一个数组,该数组包含其作者与传入的targetAuthor匹配的所有MediaItem的String表示形式。该数组不能包含任何null值。如果不匹配,则该方法返回长度为0的数组。这是我的代码

private ArrayList<MediaItem> itemList;

public MediaList(){
          itemList = new ArrayList<MediaItem>();
       }

...

public String[] getAllItemsByAuthor(String targetAuthor){
      Object tempArray[] = itemList.toArray();
      String targetAuthorArray[] = new String[tempArray.length];
      for (int i = 0; i < tempArray.length; i++){
         targetAuthorArray[i] = (String)tempArray[i];
      }
      int index = 0;
      for (String value : targetAuthorArray){
         if (Arrays.asList(targetAuthorArray).contains(targetAuthor)) {
            targetAuthorArray[index] = String.valueOf(value);
         }
      }
      return targetAuthorArray;

   }

这里是正在运行的测试

@Test 
   public void getItemsByAuthorZeroMatchesTest() {
      createListForTesting(mediaList);
      String[] items = mediaList.getAllItemsByAuthor("No Author Matches This"); 
      assertEquals("Test 36: Test the getAllItemsByAuthor method with zero matches.", 0, items.length);
   }

此测试运行时弹出错误

java.lang.ClassCastException: class Song cannot be cast to class java.lang.String (Song is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')

我还有另一种方法应该做同样的事情。应该返回一个新数组,该数组包含其标题与传递的targetTitle匹配的所有MediaItem的String表示形式。应该使用其toString()方法,并且不能返回任何null值

这是我的代码

 public String[] getAllItemsByTitle(String targetTitle){
      String targetTitleArray[] = new String[itemList.size()];
      int index = 0;
      for (MediaItem value : itemList){
         if (Arrays.asList(itemList).contains(targetTitle)) {
            targetTitleArray[index] = String.valueOf(value);
         }
      }
      return targetTitleArray;
   }

我没有使用toString方法,因为我不知道在哪里合并它,但这是它的代码

public String toString(){
     return title+", "+author+", "+genre;
  }

运行getAllItemsByTitle时,它应该返回两个匹配项,但返回每个项目。

java arrays
1个回答
0
投票
您的tempArray数组似乎包含Song对象(您知道您也可以执行Song[] array = new Song[size],对吗?)。

Song无法转换为String。像这样想:

int i = "ABCD";

显然不起作用。相反,请执行以下操作:

tempArray[i].toString();

但是您会遇到这个问题,在那里也可以解决。 How do I print my Java object without getting "SomeType@2f92e0f4"?

© www.soinside.com 2019 - 2024. All rights reserved.