标签: collect

Java 8在分组时不维护顺序

我使用Java 8进行数据分组.但获得的结果不是按顺序形成的.

Map<GroupingKey, List<Object>> groupedResult = null;

        if (!CollectionUtils.isEmpty(groupByColumns)) {

            Map<String, Object> mapArr[] = new LinkedHashMap[mapList.size()];

            if (!CollectionUtils.isEmpty(mapList)) {
                int count = 0;
                for (LinkedHashMap<String, Object> map : mapList) {
                    mapArr[count++] = map;
                }
            }
            Stream<Map<String, Object>> people = Stream.of(mapArr);
            groupedResult = people
                    .collect(Collectors.groupingBy(p -> new GroupingKey(p, groupByColumns), Collectors.mapping((Map<String, Object> p) -> p, toList())));


public static class GroupingKey 

        public GroupingKey(Map<String, Object> map, List<String> cols) {

            keys = new ArrayList<>();

            for (String col : cols) {
                keys.add(map.get(col));
            }
        }

        // Add …
Run Code Online (Sandbox Code Playgroud)

grouping collect java-8 java-stream

22
推荐指数
2
解决办法
2万
查看次数

映射数组仅修改与特定条件匹配的元素

在Ruby中,以某种方式映射数组的最具表现力的方式是什么?某些元素被修改而其他元素保持不变

这是一种直截了当的方式:

old_a = ["a", "b", "c"]                         # ["a", "b", "c"]
new_a = old_a.map { |x| (x=="b" ? x+"!" : x) }  # ["a", "b!", "c"]
Run Code Online (Sandbox Code Playgroud)

如果不够的话,当然会省略"单独"的情况:

new_a = old_a.map { |x| x+"!" if x=="b" }       # [nil, "b!", nil]
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的:

new_a = old_a.map_modifying_only_elements_where (Proc.new {|x| x == "b"}) 
        do |y|
          y + "!"
        end
# ["a", "b!", "c"]
Run Code Online (Sandbox Code Playgroud)

有没有一些很好的方法在Ruby中执行此操作(或者Rails有一些我还没有找到的方便方法)?


谢谢大家的回复.虽然你总是说服我最好只使用map三元运算符,但有些人发布了非常有趣的答案!

ruby iteration map collect

19
推荐指数
3
解决办法
3万
查看次数

仅在结果不为null时收集

我有一个集合,我想找到某些元素并对其进行转换.我可以在两个闭包中做到这一点,但我想知道是否有可能只有一个?

def c = [1, 2, 3, 4]

def result = c.findAll {
    it % 2 == 0
}

result = result.collect {
   it /= 2
}
Run Code Online (Sandbox Code Playgroud)

我的真实用例是使用Gradle,我想找到一组特定的文件并将它们转换为完全限定的包名.

groovy find collect gradle

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

如何收集DoubleStream到列表

我有以下代码:

Stream.of("1,2,3,4".split(",")).mapToDouble(Double::valueOf).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我想回来List<Double>.

此代码无法编译.

我看到错误:

Error:(57, 69) java: method collect in interface java.util.stream.DoubleStream cannot be applied to given types;
  required: java.util.function.Supplier<R>,java.util.function.ObjDoubleConsumer<R>,java.util.function.BiConsumer<R,R>
  found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>
  reason: cannot infer type-variable(s) R
    (actual and formal argument lists differ in length)
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

java collect java-8 java-stream

12
推荐指数
1
解决办法
7104
查看次数

Spark:转换为DF后,collect(),take()和show()输出之间的差异

我正在使用Spark 1.5.

我有一个30列的列,我integers从数据库加载:

val numsRDD = sqlContext
     .table(constants.SOURCE_DB + "." + IDS)
     .select("id")
     .distinct
     .map(row=>row.getInt(0))
Run Code Online (Sandbox Code Playgroud)

这是输出numsRDD:

numsRDD.collect.foreach(println(_))

643761
30673603
30736590
30773400
30832624
31104189
31598495
31723487
32776244
32801792
32879386
32981901
33469224
34213505
34709608
37136455
37260344
37471301
37573190
37578690
37582274
37600896
37608984
37616677
37618105
37644500
37647770
37648497
37720353
37741608
Run Code Online (Sandbox Code Playgroud)

接下来,我想为那些产生3的所有组合,ids然后将每个组合保存为表单的元组:< tripletID: String, triplet: Array(Int)>并将其转换为数据帧,我按如下方式执行:

// |combinationsDF| = 4060 combinations
val combinationsDF = sc
  .parallelize(numsRDD
     .collect
     .combinations(3)
     .toArray
     .map(row => …
Run Code Online (Sandbox Code Playgroud)

scala collect dataframe take apache-spark

11
推荐指数
2
解决办法
2万
查看次数

如何改进用```引用所有数组元素的代码并返回一个包含所有引用和逗号分隔元素的字符串?

我正在使用Rails 3.2.2,我想引用所有数组元素'并返回一个包含所有引用和逗号分隔元素的字符串.这时我正在使用

['a', 'b', 'c'].collect {|x| "'#{x}'"}.join(", ")
# => "'a', 'b', 'c'"
Run Code Online (Sandbox Code Playgroud)

但我认为我可以改进上面的代码(可能是通过使用一个未知的Ruby方法,如果它存在).可能吗?

ruby arrays ruby-on-rails collect

9
推荐指数
2
解决办法
5792
查看次数

在Spark中运行任务时出错ExecutorLostFailure

当我试图在这个文件夹上运行它时,它每次都抛出ExecutorLostFailure

嗨,我是Spark的初学者.我试图在Spark 1.4.1上运行一个带有8个从属节点的工作,每个3.2 GB磁盘有11.7 GB内存.我正在从一个从节点(来自8个节点)运行Spark任务(因此,每个节点上只有大约4.8 gb的0.7存储分数)并使用Mesos作为Cluster Manager.我正在使用此配置:

spark.master mesos://uc1f-bioinfocloud-vamp-m-1:5050
spark.eventLog.enabled true
spark.driver.memory 6g
spark.storage.memoryFraction 0.7
spark.core.connection.ack.wait.timeout 800
spark.akka.frameSize 50
spark.rdd.compress true
Run Code Online (Sandbox Code Playgroud)

我试图在14 GB的数据文件夹上运行Spark MLlib朴素贝叶斯算法.(当我在6 GB文件夹上运行任务时没有问题)我正在从谷歌存储中读取此文件夹作为RDD并将32作为分区参数.(我也尝试过增加分区).然后使用TF创建特征向量并基于此进行预测.但是当我试图在这个文件夹上运行它时,它每次都会抛出ExecutorLostFailure.我尝试了不同的配置,但没有任何帮助.可能是我遗漏了一些非常基本但却无法弄清楚的东西.任何帮助或建议都将非常有价值.

日志是:

   15/07/21 01:18:20 ERROR TaskSetManager: Task 3 in stage 2.0 failed 4 times; aborting job    
15/07/21 01:18:20 INFO TaskSchedulerImpl: Cancelling stage 2    
15/07/21 01:18:20 INFO TaskSchedulerImpl: Stage 2 was cancelled    
15/07/21 01:18:20 INFO DAGScheduler: ResultStage 2 (collect at /opt/work/V2ProcessRecords.py:213) failed in 28.966 s    
15/07/21 01:18:20 INFO DAGScheduler: Executor lost: …
Run Code Online (Sandbox Code Playgroud)

collect apache-spark pyspark apache-spark-mllib

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

Java 8流连接并返回多个值

我正在将一段代码从.NET移植到Java,并偶然发现了我想使用流来映射和缩减的场景.

class Content
{
  private String propA, propB, propC;
  Content(String a, String b, String c)
  {
    propA = a; propB = b; propC = c;
  }
  public String getA() { return propA; }
  public String getB() { return propB; }
  public String getC() { return propC; }
}

List<Content> contentList = new ArrayList();
contentList.add(new Content("A1", "B1", "C1"));
contentList.add(new Content("A2", "B2", "C2"));
contentList.add(new Content("A3", "B3", "C3"));
Run Code Online (Sandbox Code Playgroud)

我想编写一个函数,可以流式传输contentlist的内容并返回一个带有结果的类

content { propA = "A1, A2, A3", propB = "B1, B2, B3", propC = …
Run Code Online (Sandbox Code Playgroud)

java dictionary collect java-8 java-stream

9
推荐指数
3
解决办法
5592
查看次数

Scala:在一次迭代中过滤和映射的最佳方式

我是Scala的新手,并试图找出过滤和映射集合的最佳方法.这是一个解释我的问题的玩具示例.

方法1:这非常糟糕,因为我在列表中迭代两次并在每次迭代中计算相同的值.

val N = 5
val nums = 0 until 10
val sqNumsLargerThanN = nums filter { x: Int => (x * x) > N } map { x: Int => (x * x).toString }
Run Code Online (Sandbox Code Playgroud)

方法2:这稍微好一点,但我还需要计算(x * x)两次.

val N = 5
val nums = 0 until 10
val sqNumsLargerThanN = nums collect { case x: Int if (x * x) > N => (x * x).toString }
Run Code Online (Sandbox Code Playgroud)

那么,是否可以计算这个而不重复两次收集并避免重复相同的计算?

collections dictionary scala filter collect

7
推荐指数
3
解决办法
1860
查看次数

Java 8 stream.collect(Collectors.toMap())模拟在kotlin中

假设我有一个人员列表并希望拥有Map<String, Person>,其中String是人名.我应该怎么做kotlin?

java sequence collect kotlin java-stream

7
推荐指数
1
解决办法
2219
查看次数