時(shí)間:2023-04-24 11:09:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-04-24 11:09:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
山寨Stream API:摘自《Java中級(jí)路線》的Java8新特性一章。List<Person> list = new ArrayList<>();請(qǐng)大家先自行實(shí)現(xiàn)這個(gè)需求。
list.add(new Person("李健", 46));
list.add(new Person("周深", 28));
list.add(new Person("張學(xué)友", 59));
請(qǐng)篩選出年齡大于40的歌手的名字
public class ChainCall { public static void main(String[] args) { Person bravo1988 = new Person().setName("bravo1988").setAge(18).setMoney(1000.0); }}class Person { private String name; private Integer age; private Double money; public String getName() { return name; } public Integer getAge() { return age; } public Double getMoney() { return money; } public Person setName(String name) { this.name = name; return this; } public Person setAge(Integer age) { this.age = age; return this; } public Person setMoney(Double money) { this.money = money; return this; }}
/** * @author bravo * @date 2020-03-19 17:55 */public class MockStream { public static void main(String[] args) throws JsonProcessingException { MyList<Person> personMyList = new MyList<>(); personMyList.add(new Person("李健", 46)); personMyList.add(new Person("周深", 28)); personMyList.add(new Person("張學(xué)友", 59)); // 需求:過(guò)濾出年齡大于40的歌手的名字 MyList<String> result = personMyList.filter(person -> person.getAge() > 40).map(person -> person.getName()); prettyPrint(result.getList()); System.out.println("/n---------------------------------------------/n"); // 對(duì)比真正的Stream API List<Person> list = new ArrayList<>(); list.add(new Person("李健", 46)); list.add(new Person("周深", 28)); list.add(new Person("張學(xué)友", 59)); List<String> collect = list.stream().filter(person -> person.getAge() > 40).map(person -> person.getName()).collect(Collectors.toList()); prettyPrint(collect); } /** * 按JSON格式輸出 * * @param obj * @throws JsonProcessingException */ private static void prettyPrint(Object obj) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); String s = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); System.out.println(s); }}@Data@AllArgsConstructorclass Person { private String name; private Integer age;}@Getterclass MyList<T> { private List<T> list = new ArrayList<>(); public boolean add(T t) { return list.add(t); } /** * 給MyList傳遞具體的判斷規(guī)則,然后MyList把內(nèi)部現(xiàn)有符合判斷(true)的元素集返回 * @param predicate * @return */ public MyList<T> filter(Predicate<T> predicate){ MyList<T> filteredList = new MyList<>(); for (T t : list) { if (predicate.test(t)) { // 收集判斷為true的元素 filteredList.add(t); } } return filteredList; } /** * 把MyList中的List<T>轉(zhuǎn)為L(zhǎng)ist<R> * * @param mapper * @param <R> * @return */ public <R> MyList<R> map(Function<T, R> mapper) { MyList<R> mappedList = new MyList<>(); for (T t : list) { mappedList.add(mapper.apply(t)); } return mappedList; }}/** * 定義一個(gè)Predicate接口,名字無(wú)所謂 * * @param <T> */@FunctionalInterfaceinterface Predicate<T> { /** * 定義了一個(gè)test()方法,傳入任意對(duì)象,返回true or false,具體判斷邏輯由子類(lèi)實(shí)現(xiàn) * * @param t * @return */ boolean test(T t);}/** * 定義一個(gè)Function接口,名字無(wú)所謂 * * @param <E> * @param <R> */@FunctionalInterfaceinterface Function<E, R> { /** * 定義一個(gè)apply()方法,接收一個(gè)E返回一個(gè)R。也就是把E映射成R * * @param e * @return */ R apply(E e);}
看不懂沒(méi)關(guān)系,感受一下即可。關(guān)鍵詞:山寨
客戶&案例
營(yíng)銷(xiāo)資訊
關(guān)于我們
客戶&案例
營(yíng)銷(xiāo)資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。