要從一個(gè)List<Person>集合中,找出Person的id為id1的對(duì)象,除了遍歷有什么更簡(jiǎn)便的寫法?我記得c#中可以直接find,就一行代碼?想讓一個(gè)List<Person>集合中,所有元素的id作為一個(gè)數(shù)組輸出如[id1,id2,id3...],除了遍歷有什么簡(jiǎn)便寫法?
2 回答

小怪獸愛(ài)吃肉
TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
可能不太簡(jiǎn)潔,但是可以自己寫:
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); } }

慕田峪4524236
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
用Java 8 Stream API:
Optional<Person> result = persons.stream().filter(p -> p.getId() == id1).findFirst();int[] ids = persons.stream().mapToInt(p -> p.getId()).toArray();
添加回答
舉報(bào)
0/150
提交
取消