在List的某个字段上创建addAll()

时间:2015-03-10 14:33:12

标签: java list

对不起标题,但我不知道如何更好地解释它!

假设我在Java中有这个类:

public class ToyClass {
    public int number;
}

一个名为ToyClassList

的ToyClass对象列表

有办法做这样的事情:

List<Integer> numbersInToyClassList = new ArrayList<>().addAll(ToyClassList.number)

换句话说,我试图以更优雅的方式写这段代码:

List<Integer> numbersInToyClassList = new ArrayList<>();
for(ToyClass element : ToyClassList)
    numbersInToyClassList.add(element.number);

2 个答案:

答案 0 :(得分:2)

在Java 7及更早版本中,您可以添加几行代码来实现自己的Stream API:

    interface Function<A, B> {
        B map(A a);
    }

    class ListUtil {
        public static <A, B> List<B> map(Function<A, B> function, List<A> aList) {
            List<B> bList = new ArrayList<>();
            for (A a : aList) {
                bList.add(function.map(a));
            }
            return bList;
        }
    }

使用以下代码转换toyClassList

List<Integer> numbersInToyClassList = ListUtil.map(
    new Function<ToyClass, Integer>(){
         public Integer map(ToyClass toy){
             return toy.number;
         }
    }, toyClassList);

答案 1 :(得分:1)

在Java 8中,你可以做到

List<Integer> numbersInToyClassList = toysClassList.stream()
  .map(ToysClass::getNumber)
  .collect(Collectors.toList);

这是否更优雅是你的判断。

顺便说一下:您的对象numbersInToyClassList应该处于较低的驼峰状态,因为它不是类型。