How can I convert ArrayList<Object> to ArrayList?

后端 未结 11 726
-上瘾入骨i
-上瘾入骨i 2020-11-28 06:31
ArrayList list = new ArrayList();
list.add(1);
list.add(\"Java\");
list.add(3.14);
System.out.println(list.toString());


相关标签:
11条回答
  • 2020-11-28 07:13

    With Java Generics Takes a list of X and returns a list of T that extends or implements X, Sweet!

        // the cast is is actually checked via the method API
    @SuppressWarnings("unchecked")
    public static <T extends X, X> ArrayList<T> convertToClazz(ArrayList<X> from, Class<X> inClazz, Class<T> outClazz) {
        ArrayList<T> to = new ArrayList<T>();
        for (X data : from) {
            to.add((T) data);
        }
        return to;
    }
    
    0 讨论(0)
  • 2020-11-28 07:14

    Since this is actually not a list of strings, the easiest way is to loop over it and convert each item into a new list of strings yourself:

    List<String> strings = list.stream()
       .map(object -> Objects.toString(object, null))
       .collect(Collectors.toList());
    

    Or when you're not on Java 8 yet:

    List<String> strings = new ArrayList<>(list.size());
    for (Object object : list) {
        strings.add(Objects.toString(object, null));
    }
    

    Or when you're not on Java 7 yet:

    List<String> strings = new ArrayList<String>(list.size());
    for (Object object : list) {
        strings.add(object != null ? object.toString() : null);
    }
    

    Note that you should be declaring against the interface (java.util.List in this case), not the implementation.

    0 讨论(0)
  • 2020-11-28 07:17

    It's not safe to do that!
    Imagine if you had:

    ArrayList<Object> list = new ArrayList<Object>();
    list.add(new Employee("Jonh"));
    list.add(new Car("BMW","M3"));
    list.add(new Chocolate("Twix"));
    

    It wouldn't make sense to convert the list of those Objects to any type.

    0 讨论(0)
  • 2020-11-28 07:17

    If you want to do it the dirty way, try this.

    @SuppressWarnings("unchecked")
    public ArrayList<String> convert(ArrayList<Object> a) {
       return (ArrayList) a;
    }
    

    Advantage: here you save time by not iterating over all objects.

    Disadvantage: may produce a hole in your foot.

    0 讨论(0)
  • 2020-11-28 07:23

    Here is another alternative using Guava

    List<Object> lst ...    
    List<String> ls = Lists.transform(lst, Functions.toStringFunction());
    
    0 讨论(0)
  • 2020-11-28 07:25

    Using Java 8 lambda:

    ArrayList<Object> obj = new ArrayList<>();
    obj.add(1);
    obj.add("Java");
    obj.add(3.14);
    
    ArrayList<String> list = new ArrayList<>();
    obj.forEach((xx) -> list.add(String.valueOf(xx)));
    
    0 讨论(0)
提交回复
热议问题