日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

JAVA 8 通過引入 java.util.stream包 和 Lambda表達(dá)式實(shí)現(xiàn)了使用一行代碼解決這個問題:

List<Person> beerDrinkers = persons.stream()
    .filter(p -> p.getAge() > 16).collect(Collectors.toList());

使用 Collection.removeIf 在滿足條件的情況下修改集合。(注意:在本例中,將刪除滿足條件的對象):

persons.removeIf(p -> p.getAge() <= 16);

Lambdaj 庫允許在不寫循環(huán)或內(nèi)部類的情況下過濾集合(Lambdaj允許以偽函數(shù)和靜態(tài)類型的方式操作集合,在迭代集合時部分地消除寫循環(huán)(通常是嵌套的和可讀性差的)的負(fù)擔(dān)):

List<Person> beerDrinkers = select(persons, having(on(Person.class).getAge(),
    greaterThan(16)));

你無法想象比這更容易理解的東西!

假設(shè)你使用的是 Java 1.5,并且你無法使用谷歌的 Collections,我會做一些與谷歌非常相似的事情。

首先將下面的接口添加到你的代碼中:

public interface IPredicate<T> { boolean Apply(T type); }

當(dāng)判斷為某種類型的真時,實(shí)現(xiàn)者可以進(jìn)行返回。例如:如果 T 是 User,并且AuthorizedUserPredicate <User>實(shí)現(xiàn) IPredicate <T>,則
AuthorizedUserPredicate.apply返回傳入的 User是否被授權(quán)。

在一些通用的工具類中,可以這樣寫:

public static <T> Collection<T> filter(Collection<T> target, IPredicate<T> predicate) {
    Collection<T> result = new ArrayList<T>();
    for (T element: target) {
        if (predicate.apply(element)) {
            result.add(element);
        }
    }
    return result;
}

所以,可能你會進(jìn)行下面的實(shí)現(xiàn):

Predicate<User> isAuthorized = new Predicate<User>() {
    public boolean apply(User user) {
        // binds a boolean method in User to a reference
        return user.isAuthorized();
    }
};
// allUsers is a Collection<User>
Collection<User> authorizedUsers = filter(allUsers, isAuthorized);

如果關(guān)注線性檢查的性能,那么我可能需要一個具有目標(biāo)集合的域?qū)ο蟆>哂心繕?biāo)集合的域?qū)ο髮⒕哂杏糜诔跏蓟⑻砑雍驮O(shè)置目標(biāo)集合的方法的篩選邏輯。

更新:

在工具類(就叫 Predicate吧)中,我添加了一個選擇方法,其中包含一個在謂詞不返回預(yù)期值時用于默認(rèn)值的選項(xiàng),以及一個用于在新 IPredicate 中使用的參數(shù)的靜態(tài)屬性

public class Predicate {
    public static Object predicateParams;

    public static <T> Collection<T> filter(Collection<T> target, IPredicate<T> predicate) {
        Collection<T> result = new ArrayList<T>();
        for (T element : target) {
            if (predicate.apply(element)) {
                result.add(element);
            }
        }
        return result;
    }

    public static <T> T select(Collection<T> target, IPredicate<T> predicate) {
        T result = null;
        for (T element : target) {
            if (!predicate.apply(element))
                continue;
            result = element;
            break;
        }
        return result;
    }

    public static <T> T select(Collection<T> target, IPredicate<T> predicate, T defaultValue) {
        T result = defaultValue;
        for (T element : target) {
            if (!predicate.apply(element))
                continue;
            result = element;
            break;
        }
        return result;
    }
}

下面的示例展示了如何在集合之間查找丟失的對象:

List<MyTypeA> missingObjects = (List<MyTypeA>) Predicate.filter(myCollectionOfA,
    new IPredicate<MyTypeA>() {
        public boolean apply(MyTypeA objectOfA) {
            Predicate.predicateParams = objectOfA.getName();
            return Predicate.select(myCollectionB, new IPredicate<MyTypeB>() {
                public boolean apply(MyTypeB objectOfB) {
                    return objectOfB.getName().equals(Predicate.predicateParams.toString());
                }
            }) == null;
        }
    });

下面的示例展示了在集合中查找實(shí)例,并在沒有找到實(shí)例時將集合的第一個元素作為默認(rèn)值返回:

MyType myObject = Predicate.select(collectionOfMyType, new IPredicate<MyType>() {
public boolean apply(MyType objectOfMyType) {
    return objectOfMyType.isDefault();
}}, collectionOfMyType.get(0));

更新 (Java 8 發(fā)布后):

final UserService userService = ... // perhaps injected IoC
final Optional<UserModel> userOption = userCollection.stream().filter(u -> {
    boolean isAuthorized = userService.isAuthorized(u);
    return isAuthorized;
}).findFirst();

可選的 JDK 8 API 具有 get(),isPresent(),orElse(defaultUser),orElseGet(userSupplier)和 orElseThrow(exceptionSupplier) 以及其他單一的方法,例如:map, flatMap和 filter。

如果你只想篩選滿足條件的所有用戶,請使用收集器將流終止于所需的收集中:

final UserService userService = ... // perhaps injected IoC
final List<UserModel> userOption = userCollection.stream().filter(u -> {
    boolean isAuthorized = userService.isAuthorized(u);
    return isAuthorized;
}).collect(Collectors.toList());

分享到:
標(biāo)簽:集合 Java
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定