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

时间:2019-12-02 01:36:30

标签: java arrays

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

Parse

...

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);
   }

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

这是我的代码

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')

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

 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;
   }

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

1 个答案:

答案 0 :(得分:0)

targetAuthorArray[i] = (String)tempArray[i];

您的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"?