您好,匿名用户
随意问技术百科期待您的加入

java集合容器的两个问题

0 投票
  1. 要从一个List<Person>集合中,找出Person的id为id1的对象,除了遍历有什么更简便的写法?我记得c#中可以直接find,就一行代码?
  2. 想让一个List<Person>集合中,所有元素的id作为一个数组输出如[id1,id2,id3...],除了遍历有什么简便写法?
用户头像 提问 2014年 5月14日 @ Vladimir 上等兵 (275 威望)
分享到:

1个回答

0 投票
 
最佳答案

可能不太简洁,但是可以自己写:

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public final class ListUtils {

    public static <T> T collectFirst(final Iterable<T> list, final Predicate<T> predicate) {
        for (T element : list) {
            if (predicate.apply(element)) {
                return element;
            }
        }
        return null;
    }

    public static <A, B> Iterable<B> map(final Iterable<A> list, final F1<A, B> func) {
        return new Iterable<B>() {

            @Override
            public Iterator<B> iterator() {
                return new Iterator<B>() {
                    private Iterator<A> i = list.iterator();

                    @Override
                    public boolean hasNext() {
                        return i.hasNext();
                    }

                    @Override
                    public B next() {
                        return func.apply(i.next());
                    }

                    @Override
                    public void remove() {
                        i.next();
                    }
                };
            }
        };
    }

    public static void main(String[] args) {
        final List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6);

        final Integer result = collectFirst(integers, new Predicate<Integer>() {
            @Override
            public boolean apply(Integer e) {
                return e.compareTo(3) > 0;
            }
        });

        System.out.println(String.format("The first integer larger than 3 is %d", result));

        final Iterable<Integer> results = map(integers, new F1<Integer, Integer>() {
            @Override
            public Integer apply(Integer integer) {
                return integer * integer;
            }
        });

        System.out.println("The squares of them are: ");
        for (Integer i : results) {
            System.out.print(i + " ");
        }
    }

    public interface Predicate<T> {
        boolean apply(final T e);
    }

    public interface F1<A, B> {
        B apply(final A a);
    }
}
用户头像 回复 2014年 5月14日 @ Elise 上等兵 (273 威望)
选中 2013年 9月7日 @Vladimir
提一个问题:

相关问题

+1 投票
1 回复 46 阅读
用户头像 提问 2012年 12月1日 @ 阿尔托莉雅 下士 (587 威望)
+2 投票
1 回复 61 阅读
用户头像 提问 2013年 1月21日 @ Zeus 上等兵 (193 威望)
0 投票
0 回复 20 阅读
0 投票
1 回复 38 阅读
用户头像 提问 2013年 12月18日 @ Katarina 上等兵 (271 威望)
0 投票
0 回复 17 阅读
用户头像 提问 2014年 1月21日 @ Tristana 上等兵 (285 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...