相关疑难解决方法(0)

有序流上的减少是按顺序减少的吗?

我有一个ListA,B,C.

C reduce A reduce B != A reduce B reduce C (但是,减少(B减少C)是可以的).

换句话说,我的还原操作是关联的,但不是可交换的.

java是否对有序顺序流(例如列表中的默认流)执行减少将始终根据遭遇顺序进行减少?也就是说,java会重新排序减少(这样B减少A而不是A减少B)?

(希望这很清楚).

编辑添加一个小演示,也许有助于澄清

Stream.of(" cats ", " eat ", " bats ")
  .reduce("", (a, b) -> a + b); // cats eat bats
Run Code Online (Sandbox Code Playgroud)

有了上述,输出可能是"蝙蝠猫吃"​​或"吃蝙蝠猫"?是否在规范的某处保证了?

java java-8 java-stream

7
推荐指数
2
解决办法
1165
查看次数

Java流处理顺序

我有以下几点:

LinkedList<Integer> ints = new LinkedList();
//fill it with some ints
Stream<Integer> stream = ints.stream();
//process the stream in some way
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以保证流的处理顺序与底层相同LinkedList?我阅读了文档,但没有关于订购的任何信息。

就我而言,保留订单至关重要。

java java-8 java-stream

6
推荐指数
1
解决办法
1315
查看次数

使用流和减少消费者链的订单保证

因此,在当前场景中,我们有一组 API,如下所示:

Consumer<T> start();
Consumer<T> performDailyAggregates();
Consumer<T> performLastNDaysAggregates();
Consumer<T> repopulateScores();
Consumer<T> updateDataStore();
Run Code Online (Sandbox Code Playgroud)

通过这些,我们的调度程序之一执行任务,例如

private void performAllTasks(T data) {
    start().andThen(performDailyAggregates())
            .andThen(performLastNDaysAggregates())
            .andThen(repopulateScores())
            .andThen(updateDataStore())
            .accept(data);
}
Run Code Online (Sandbox Code Playgroud)

在回顾这一点时,我想到了一个更灵活的实现1来执行如下任务:

// NOOP in the context further stands for  'anything -> {}'
private void performAllTasks(Stream<Consumer<T>> consumerList, T data) {
    consumerList.reduce(NOOP, Consumer::andThen).accept(data);
}
Run Code Online (Sandbox Code Playgroud)

现在让我想到的一点是 Javadoc 清楚地指出

accumulator - 用于组合两个值的关联的、无干扰的、无状态的函数

接下来我在想如何确保 java8 流中的处理顺序?订购(处理顺序是一样的遭遇顺序)!

好的,流产生了 List将被排序,除非在以下实现parallel之前创建流reduce2

private void performAllTasks(List<Consumer<T>> consumerList, T data) {
    consumerList.stream().reduce(NOOP, Consumer::andThen).accept(data); …
Run Code Online (Sandbox Code Playgroud)

java reduce consumer java-8 java-stream

6
推荐指数
1
解决办法
202
查看次数

Java8将对象列表转换为对象的一个​​属性列表

我想使用Java 8技巧在一行中执行以下操作.

鉴于此对象定义:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MyObj {
    private String id;
    private Double value;
}
Run Code Online (Sandbox Code Playgroud)

和a List<MyObj> objects,我想获得一个List<String> objectIds是第一个列表中所有id对象的列表 - 以相同的顺序.

我可以使用Java中的循环来做到这一点,但我相信在Java8中应该有一个单行的lambda可以做到这一点.我无法在网上找到解决方案.也许我没有使用正确的搜索词.

有人可以为这个变换建议一个lambda或另一个单行程吗?

java lambda list java-8 java-stream

5
推荐指数
1
解决办法
1万
查看次数

Java 8 - Stream - 按值分组并查找该对象的最小值和最大值

对于我的例子,有汽车对象,并发现基于模型的最小和最大价格值(分组依据).

List<Car> carsDetails = UserDB.getCarsDetails();
Map<String, DoubleSummaryStatistics> collect4 = carsDetails.stream()
                .collect(Collectors.groupingBy(Car::getMake, Collectors.summarizingDouble(Car::getPrice)));
collect4.entrySet().forEach(e->System.out.println(e.getKey()+" "+e.getValue().getMax()+" "+e.getValue().getMin()));

output :
Lexus 94837.79 17569.59
Subaru 96583.25 8498.41
Chevrolet 99892.59 6861.85
Run Code Online (Sandbox Code Playgroud)

但我找不到哪个车对象有最高和最低价格.我怎样才能做到这一点?

java java-8 java-stream

5
推荐指数
2
解决办法
3348
查看次数

java 8 中的 parallelStream() 是否保证顺序?

我试图了解parallelStream()java 8 中的行为。这是我的示例代码。

List<Person> javaProgrammers = new ArrayList<Person>() {
    {
        add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
        add(new Person("Tamsen", "Brittany", "Java programmer", "female", 33, 1500));
        add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));
        add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));
        add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));
        add(new Person("Maude", "Jaimie", "Java programmer", "female", 33, 1900));
        add(new Person("Shawn", "Randall", "Java programmer", "male", 33, 2300));
        add(new Person("Jayden", "Corrina", "Java programmer", "female", 33, 1700));
        add(new Person("Palmer", "Dene", "Java …
Run Code Online (Sandbox Code Playgroud)

java-8 java-stream

4
推荐指数
2
解决办法
1120
查看次数

PartitioningBy 是否保留原始列表中元素的顺序?

我已经订购了 LocalDateTime 列表,我需要在特定日期的午夜将其拆分。两个新列表中元素的顺序不应更改。

List<LocalDateTime> l = Arrays.asList(LocalDateTime.of(2017,10,24,7,0,0),LocalDateTime.of(2017,10,24,8,0,0),LocalDateTime.of(2017,10,25,7,0,0),LocalDateTime.of(2017,10,25,9,0,0));
Run Code Online (Sandbox Code Playgroud)

Collectors.partitioningBy 是否保证订单将被保留?

l.stream().collect(Collectors.partitioningBy(t-> t.isAfter(LocalDateTime.of(2017,10,25,0,0,0))))
Run Code Online (Sandbox Code Playgroud)

输出:

{false=[2017-10-24T07:00, 2017-10-24T08:00], true=[2017-10-25T07:00, 2017-10-25T09:00]}
Run Code Online (Sandbox Code Playgroud)

java java-stream

4
推荐指数
1
解决办法
1096
查看次数

java流中遇到顺序保存

我已经解决了相关问题,例如如何确保 java8 流中的处理顺序?,我仍然不完全清楚输出元素的顺序。因此,请澄清我的以下疑问。

 Integer[] intArray = {1, 2, 3, 4, 5, 6, 7, 8 };
            List<Integer> listOfIntegers =
                new ArrayList<>(Arrays.asList(intArray));
       listOfIntegers
            .parallelStream()
             .unordered()
            .forEachOrdered(e -> System.out.print(e + " "));
Run Code Online (Sandbox Code Playgroud)

我认为至少在理论上(或根据 java 规范)它可以按比 1、2、3、4、5、6、7、8 的随机顺序打印。我说得对吗?

还有一个相关的问题——相遇顺序保留的决定是在什么执行点做出的?更准确地说 - 整个流管道 ORDER 特性的评估是否在执行开始之前通过源、中间操作和终端操作的特性完成?

java java-8 java-stream

3
推荐指数
1
解决办法
1013
查看次数

如何强制Java 8流程顺序执行?

我有一个Stream作为方法的参数.我不知道它是否平行.我怎样才能保证顺序执行呢?

(没有if/else/pls的实例)

谢谢

java java-8 java-stream

3
推荐指数
1
解决办法
317
查看次数

当要比较对象的所选字段相等时,Java 如何决定对具有多个字段的对象列表进行排序?

我有一个名为 Instance 的对象,它有 2 个字段,一个特征数组(这是另一个对象),表示数据集中的列,例如年龄、性别、类别等;和它们的值(即一个数字)。我还实现了一个自定义比较器,它可以根据实例的特定功能对这些对象的列表进行排序,如下所示:

Comparator<Instance> comparator = Comparator.comparing(c -> c.get(feature));
Instance[] sorted = instList.stream().sorted(comparator).toArray(Instance[]::new);
Run Code Online (Sandbox Code Playgroud)

现在,这段代码工作正常,但是,在很多情况下,我排序的特征与另一个实例具有相同的值。在这种情况下,Java如何决定如何继续对列表进行排序?

java sorting comparator

3
推荐指数
1
解决办法
75
查看次数

标签 统计

java ×9

java-stream ×9

java-8 ×8

comparator ×1

consumer ×1

lambda ×1

list ×1

reduce ×1

sorting ×1