Java эквивалентен Python все и любой

Как мне кодировать в Java следующие строки Python?

a = [True, False]
any (a)
all (a)

inb4 "Что ты пробовал?"

Кувалдой можно было бы написать мои собственные all и any методы (и, очевидно, класс для размещения их ):

public boolean any (boolean [] items)
{
    for (boolean item: items)
        if (item) return true;
    return false;
}

//other way round for all

Но я не планирую заново изобретать колесо, и должен быть изящный способ сделать это ...

10 голосов | спросил Hyperboreus 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 22 Sep 2013 08:15:53 +0400 2013, 08:15:53

2 ответа


0

В Java 7 и более ранних версиях в стандартных библиотеках для этого нет ничего.

В Java 8 вы должны иметь возможность использовать Stream.allMatch(...) или Stream.anyMatch(...) для такого рода вещей, хотя я не уверен, что это будет оправдано с точки зрения производительности. (Для начала вам нужно будет использовать Boolean вместо boolean ...)

ответил Stephen C 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 22 Sep 2013 08:27:49 +0400 2013, 08:27:49
0

Примером потокового API Java 8 будет:

Boolean[] items = ...;
List<Boolean> itemsList = Arrays.asList(items);
if (itemsList.stream().allMatch(e -> e)) {
    // all
}
if (itemsList.stream().anyMatch(e -> e)) {
    // any
}

Решение с использованием сторонней библиотеки hamcrest:

import static org.hamcrest.Matchers.everyItem;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;

if (everyItem(is(true)).matches(itemsList)) {
    // all
}
if (hasItem(is(true)).matches(itemsList)) { // here is() can be omitted
    // any
}
ответил sevenforce 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 19 Sep 2015 19:12:00 +0300 2015, 19:12:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132