【问题标题】:Java converting object array to string arrayJava将对象数组转换为字符串数组
【发布时间】:2022-01-10 07:11:08
【问题描述】:

所以我已经尝试解决这个问题几个小时,但似乎找不到可行的答案。

我有一个存储航班信息的对象数组,我必须删除包含 Valstybe 的航班:“Maldyvai” 所以我制作了一个没有它们的新对象数组,但是当我尝试打印它时,我得到了一个内存位置。

如何将对象数组转换为字符串数组? 即使我的 java 类中有一个 tostring 方法

package com.company;

import java.util.*;
import com.company.Isvestine.OroUostasKeleivis;

public class Main {

    public static void main(String[] args) {
    // write your code here

        OroUostasKeleivis Keleiviai1 = new OroUostasKeleivis("Skrydis","Washington","JAV","Tomas","tomaitis","Washington",5465);
        OroUostasKeleivis Keleiviai2 = new OroUostasKeleivis("Skrydis","Washington","Maldyvai","Tomas","tomaitis","Maldyvai",5466);
        OroUostasKeleivis Keleiviai3 = new OroUostasKeleivis("Skrydis","Washington","JAV","Tomas","tomaitis","Washington",5467);
        OroUostasKeleivis Keleiviai4 = new OroUostasKeleivis("Skrydis","Washington","Maldyvai","Tomas","tomaitis","Maldyvai",5468);
        OroUostasKeleivis Keleiviai5 = new OroUostasKeleivis("Skrydis","Washington","JAV","Tomas","tomaitis","Washington",5469);
        OroUostasKeleivis Keleiviai6 = new OroUostasKeleivis("Skrydis","Washington","Maldyvai","Tomas","tomaitis","Maldyvai",5470);
        OroUostasKeleivis Keleiviai7 = new OroUostasKeleivis("Skrydis","Washington","JAV","Tomas","tomaitis","Washington",5475);
        OroUostasKeleivis Keleiviai8 = new OroUostasKeleivis("Skrydis","Washington","Maldyvai","Tomas","tomaitis","Maldyvai",5476);
        OroUostasKeleivis Keleiviai9 = new OroUostasKeleivis("Skrydis","Washington","JAV","Tomas","tomaitis","Washington",5477);
        OroUostasKeleivis Keleiviai10 = new OroUostasKeleivis("Skrydis","Washington","JAV","Tomas","tomaitis","Washington",5488);

        OroUostasKeleivis[] keleiviai = new OroUostasKeleivis[10];

        keleiviai[0] = Keleiviai1;
        keleiviai[1] = Keleiviai2;
        keleiviai[2] = Keleiviai3;
        keleiviai[3] = Keleiviai4;
        keleiviai[4] = Keleiviai5;
        keleiviai[5] = Keleiviai6;
        keleiviai[6] = Keleiviai7;
        keleiviai[7] = Keleiviai8;
        keleiviai[8] = Keleiviai9;
        keleiviai[9] = Keleiviai10;

        for (OroUostasKeleivis keleiveliai:keleiviai) {
            System.out.println(keleiveliai);
        }

        System.out.println("test debug");
        OroUostasKeleivis[] keleiviaibemaldyvu = new OroUostasKeleivis[10];

        for (int i = 0; i < 10; i++) {

        }
        System.out.println(IsstrintiMaldyvus(keleiviai));
        String convertedStringObject = IsstrintiMaldyvus(keleiviai) .toString();
        System.out.println(convertedStringObject );
    }

    static Object[] IsstrintiMaldyvus(OroUostasKeleivis[] keleiviai){

        OroUostasKeleivis[] keleiviaiBeMaldyvu = new OroUostasKeleivis[10];
        int pozicija = 0;

        for ( OroUostasKeleivis keleiveliai: keleiviai) {
            if (keleiveliai.getValstybe() != "Maldyvai"){
                keleiviaiBeMaldyvu[pozicija] = keleiveliai;
                pozicija++;
            }
        }
        return keleiviaiBeMaldyvu;

    }
}

【问题讨论】:

  • 你记得在你的类中重写了 toString 方法吗?如果没有,它将采用从 Object 类继承的方法,显示类似 ClassName@358e74 ..
  • 是的,我确实覆盖了它
  • 您正在打印数组,您必须打印单独的对象。对于数组,没有 toString 实现

标签: java arrays class object


【解决方案1】:

但是当我尝试打印它时,我得到了一个内存位置

是的,您不会得到预期的结果,尤其是使用任何数组调用toString()。详情请见documentation of java.lang.Object.toString()

那么我们该如何解决问题呢?

首先,像这样覆盖OroUostasKeleivis 中的toString() 方法:

class OroUostasKeleivis {
    @Override
    public String toString() {
        // your implementation here
        return null; // TODO: change here
    }
}

其次,你可以做任何一种方式:

  1. 如果您只想打印出来,可以像您一样在 for-each 循环中使用 System.out.println(keleiveliai) 来完成。
  2. 如果您有兴趣将OroUostasKeleivis[] 转换为String[],您可以:
// this requires Java 8 or later
String[] converted = Arrays.asList(keleiviai)
    .stream()
    .map(OroUostasKeleivis::toString)
    .toArray(String[]::new);

// then use `converted`

【讨论】:

  • 你解决了错误的问题。他在一个数组上调用了 toString,而不是它的内容
【解决方案2】:

使用System.out.println(Arrays.toString(IsstrintiMaldyvus(keleiviai)))

https://www.geeksforgeeks.org/arrays-tostring-in-java-with-examples/

它将打印数组内容,类似于如果 ArrayList 具有相同的内容,它将被打印出来。

把它想象成: [ obj1.toString(), obj2.toString(), ... ]

【讨论】:

    【解决方案3】:

    使用java.util.Arrays#stream(T[])过滤并将对象数组转换为字符串数组并使用java.util.Arrays#toString(java.lang.Object[])将数组转换为可读字符串。

     final String[] oroUostasKeleivis = Arrays.stream(keleiviai)
                    .filter(
                            k -> k.getValStybe() != "Maldyvai"
    
                    )
                    //                or other convert code
                    .map(OroUostasKeleivis::toString)
                    .toArray(String[]::new);
    
            System.out.println(Arrays.toString(oroUostasKeleivis));
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 2019-03-14
      • 2018-12-01
      相关资源
      最近更新 更多