在Java 8中,我们有Stream <T>类,它奇怪地有一个方法
Iterator<T> iterator()
所以你会期望它实现接口Iterable <T>,这需要完全这个方法,但事实并非如此.
当我想使用foreach循环遍历Stream时,我必须做类似的事情
public static Iterable<T> getIterable(Stream<T> s) {
    return new Iterable<T> {
        @Override
        public Iterator<T> iterator() {
            return s.iterator();
        }
    };
}
for (T element : getIterable(s)) { ... }
我在这里错过了什么吗?
我想知道为什么Iterable界面不提供stream()和parallelStream()方法.考虑以下课程:
public class Hand implements Iterable<Card> {
    private final List<Card> list = new ArrayList<>();
    private final int capacity;
    //...
    @Override
    public Iterator<Card> iterator() {
        return list.iterator();
    }
}
这是一个Hand的实现,因为你可以在玩卡片游戏时手中拿着牌.
基本上它包装a List<Card>,确保最大容量并提供一些其他有用的功能.最好直接实现它作为一个List<Card>.
现在,为了方便起见,我认为实现它会很好Iterable<Card>,这样如果你想循环它就可以使用增强的for循环.(我的Hand班级也提供了一种get(int index)方法,因此Iterable<Card>在我看来是合理的.)
该Iterable接口提供以下内容(省略javadoc):
public interface Iterable<T> {
    Iterator<T> iterator();
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
    default Spliterator<T> …我有以下集合类型:
Map<String, Collection<String>> map;
我想map.size()从每个Key的集合中的单个值创建每个组的唯一组合.
例如,假设地图如下所示:
A, {a1, a2, a3, ..., an}
B, {b1, b2, b3, ..., bn}
C, {c1, c2, c3, ..., cn}
我希望获得的List<Set<String>>结果是一个结果,看起来类似于(排序并不重要,它只需要是一个由所有可能的组合组成的'完整'结果):
{a1, b1, c1},
{a1, b1, c2},
{a1, b1, c3},
{a1, b2, c1},
{a1, b2, c2},
{a1, b2, c3},
...
{a2, b1, c1},
{a2, b1, c2},
...
{a3, b1, c1},
{a3, b1, c2},
...
{an, bn, cn}
这基本上是一个计数问题,但我想看看是否可以使用Java 8流解决方案.
在阅读API时,DirectoryStream我错过了很多功能.首先,它建议使用for循环从流到List.我想念它DirectoryStream不是一个事实Stream.
我怎样才能让一个Stream<Path>从DirectoryStreamJava中8?
有了Iterable<T>,很容易:
T last = null;
for (T t : iterable) {
    if (last != null && last.compareTo(t) > 0) {
        return false;
    }
    last = t;
}
return true;
但我想不出一个干净的方法来做同样的事情Stream<T>,避免消耗所有元素,而不必.
我正在将 Google Guava 库的一些用法重构为Cactoos库,但我很难找出 Function 类和 Iterables.transform 方法的等效实现,使用 Cactoos 库作为替代。
新加入的文本(
    ” “,
    可迭代对象.transform(
        回购.语言(),
        新函数(){
            @覆盖
            公共字符串应用(最终语言lang){
                return String.format("#%s", lang.name());
            }
        }
    )
).asString()
 
Cactoos 中两者的正确等效实现是什么?
是否可以通过流 API 来完成?
将员工列表直接放入 CSV 的列表集合中?
这非常简单,但我看到了许多变种,我在其他地方看不到自己的做法.鉴于:
Iterable<String> strings;
创建一个包含所有字符串的String,以逗号分隔.
我有这段代码,从具有某些条件的DeviceEvents列表中提取
List<DeviceEvent> deviceEvents = new ArrayList<>();
        deviceEventService
            .findAll(loggedInUser())
            .filter(this::isAlarmMessage)   
            .iterator() 
            .forEachRemaining(deviceEvents::add);
private boolean isAlarmMessage (DeviceEvent deviceEvent) {
        return AlarmLevelEnum.HIGH == deviceEvent.getDeviceMessage().getLevel();
    }
但我得到了这个编译错误:
The method filter(this::isAlarmMessage) is undefined for the type 
 Iterable<DeviceEvent>
findAll 返回一个   Iterable<DeviceEvent> 我有一个简单的循环,可以将元素从一个添加list到另一个list。如何使用 来实现相同的结果streams?
List<User> users = new ArrayList<>();
for(User user: userRepository.findAll()) {
    users.add(user);
}
这样做的原因是因为
userRepository.findAll() 回报 Iterable<User>