标签: collect

Perl类的属性组成?

假设我有多个角色,每个角色定义一组项目:

package A;
use Moose::Role;
sub items () { qw/apple orange/ }

package B;
use Moose::Role;
with 'A';
sub items () { qw/watermelon/ }

package C;
use Moose::Role;
sub items () { qw/banana/ }
Run Code Online (Sandbox Code Playgroud)

假设我在另一个类中使用它们,我想收集所有这些项目:

package Foo;
use Moose;
with qw(B C);

sub do_something {
    my $self = shift;
    my @items = ???;   # How can I get apple, orange, watermelon, banana here?
    ....
}
Run Code Online (Sandbox Code Playgroud)

一种可能的解决方案是采用MooseX :: ComposedBehavior,但是它的POD说(当然在编写时)它的API"不太稳定",而且"当前的实现是一种破解,应该被替换通过更健壮的一个".因此,我正在调查这是否可以在不依赖于这种"黑客"的情况下完成.

警告:如果您将来阅读此内容,请查看MooseX :: ComposedBehavior的POD (当前版本:0.003),因为它可能在平均时间内发生了变化.事情变化很快.CPAN作者发布了新版本.目前"不太稳定"的东西可能在未来变得更加稳定.甚至可能还有其他模块.自行检查.

理想情况下应该有类似的东西:my @items …

perl moose composition collect class-attributes

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

Scala Option的collect方法不喜欢我的PartialFunction

我想我错过了一些东西:

scala> Some(1) collect ({ case n if n > 0 => n + 1; case _ => 0})
res0: Option[Int] = Some(2)

scala> None collect ({ case n if n > 0 => n + 1; case _ => 0})   
<console>:6: error: value > is not a member of Nothing
       None collect ({ case n if n > 0 => n + 1; case _ => 0})
                                 ^
<console>:6: error: value + is not a member of Nothing
       None …
Run Code Online (Sandbox Code Playgroud)

scala collect option partialfunction

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

C++收集算法?

我不时地需要迭代容器元素的一个子集,或者只想提取它们而忽略其余部分.我最终boost::range::adaptors::filtered用来创建这个懒惰的集合.

for(auto&& i : container | filtered(predicate)) {
  // .. do stuff
}
Run Code Online (Sandbox Code Playgroud)

是否有理由在STL中缺少收集算法(如在Ruby的收集中)(我们只有copy_if不相同)?或者反对使用它的任何理由?

可能的实现可能是:

template<class Container, class Predicate>
Container collect(Container&& c, Predicate&& p) {
  Container n;
  for(auto&& i : c) {
    if(p(i)) {
      n.push_back(i);
    }
  }
  return n;
}
Run Code Online (Sandbox Code Playgroud)

但是lazy_collect也可能有助于避免复制.

以下所有答案都很棒.我希望我可以标记所有这些.我不知道std::back_inserter.收集东西现在很简单:

boost::copy( orig | filtered(predicate), std::back_inserter(collection));
Run Code Online (Sandbox Code Playgroud)

c++ algorithm collect c++11

4
推荐指数
3
解决办法
1817
查看次数

Java 8 Stream,如何获得前N个计数?

我需要你的建议来简化下面的代码.我有一个玩家列表,其中包含赢得的游戏ID.我想从这个列表中提取2个最佳玩家(2个拥有更好匹配ID的玩家)一旦被提取,我必须返回初始列表以进行其他操作.我认为可以在优化或阅读方面改进此代码.如果你能帮助我.

public class PlayerStatistics {
    int id
    String name;
    int idMatchWon; // key from Match

    // getter , setter
}

public static void main(String[] args) throws Exception {

    List<PlayerStatistics> _players = new ArrayList<PlayerStatistics>();

    _players.add(initialize(1,'John',4));
    _players.add(initialize(2,'Teddy',2));
    _players.add(initialize(3,'Kevin',3));

    // How to get Top 2
    List<PlayerStatistics> _top2Players = extractTop2Players(_players);
}

private List<PlayerStatistics> extractTop2Players (List<PlayerStatistics> _list) {

    List<PlayerStatistics> _topPlayers = new ArrayList<PlayerStatistics>();

    // 1. Group and count 
    Map<String, Long> _players = _list
            .stream()
            .filter(x -> (!"".equals(x.getName()) && x.getName()!= null) )
            .collect(
                    Collectors.groupingBy(
                            PlayerStatistics::getName, Collectors.counting() …
Run Code Online (Sandbox Code Playgroud)

java sorting collect java-8 java-stream

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

java IntStream不能使用collect(Collectors.toList()),编译错误,为什么?

如下:

    IntStream iStream = IntStream.range(1,4);
    iStream.forEach(System.out::print);
    List list1 = iStream.collect(Collectors.toList());//error!
Run Code Online (Sandbox Code Playgroud)

Java 1.8编译器提供类型推导错误.类似的代码可以用于String类型:

    List<String> ls = new ArrayList<>();
    ls.add("abc");
    ls.add("xyz");
    List list2 = ls.stream().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

为什么?IntStream/LongStream/DoubleStream的工作方式与其他类型不同吗?如何修复我的编译错误?

java compilation collect tolist java-stream

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

在Scala中随机拆分数组

我正在Scala中构建决策树系统,但我的数据中的一些条目具有相同的属性.我通过实现一个"随机"节点类型来解决这个问题,允许查询随机选择要遍历的分支,但是当我尝试随机分割剩余的例子时,我得到一个"MatchError".我目前的代码:

def splitRandom(examples: Array[String]): Array[String]={
        examples.collect {case x if(r.nextInt(100) < 50) => x}
}
Run Code Online (Sandbox Code Playgroud)

"examples"是一个字符串数组,每个字符串都是一行,包含一个包含所有属性的数据条目.

random scala collect

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

Java 流收集以使用多个键进行映射

我以为我已经很擅长 Java 8 流了,但后来……

我有一个Foo界面:

public interface Foo {
  String getKey();
  Stream<Bar> bars();
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用每个键Stream<Foo>将 a收集到 aMap<String, Foo>中:

Map<String, Foo> foosByKey = fooStream.collect(
    Collectors.toMap(Foo::getKey, Function.identity()));
Run Code Online (Sandbox Code Playgroud)

但是如果我想将它们收集到一个Map<Bar, Foo>? 换句话说,对于FooSteamFoo中的每一个,我想把它放在映射到BarFoo.bars(). 我从哪里开始?

java key collect java-stream

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

PHP Laravel 5.5集合变平并保留整数键?

我有以下数组:

$array = [
    '2' => ['3' => ['56' => '2'], '6' => ['48' => '2']],
    '4' => ['4' => ['433' => '2', '140' => '2'], '8' => ['421' => '2', '140' => '2']],
    '5' => ['5' => ['88' => '4', '87' => '2']]
];
Run Code Online (Sandbox Code Playgroud)

以下代码(拼合)应通过保留键返回,但不是吗?

collect($array)->flatten(1);
Run Code Online (Sandbox Code Playgroud)

应该给我

[
    '3' => ['56' => '2'],
    '6' => ['48' => '2'],
    '4' => ['433' => '2', '140' => '2'],
    '8' => ['421' => '2', '140' => '2'],
    '5' => ['88' => '4', …
Run Code Online (Sandbox Code Playgroud)

php flatten collect laravel

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

根据字符串列表过滤 Scala 字符串序列

我有一个格式的 Scala 序列,("Apple-fruit", "Banana-fruittoo", "Chocolate-notafruit")我有另一个格式的 Scala 列表("Apple", "Banana")

我想根据第二个列表过滤我的第一个序列,以便我的最终输出是("Apple-fruit", "Banana-fruittoo"). 任何人都可以帮助我使用此过滤器功能吗?

string scala filter delimiter collect

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

Iterator::collect 函数是如何工作的?

我试图collect通过阅读一些文档来了解函数的全部功能。我遇到了一些挑战,特别是在页面上引用的最后一个例子中(也在下面列出,我的评论内嵌)

let results = [Ok(1), Err("nope"), Ok(3), Err("bad")];

let result: Result<Vec<_>, &str> = results.iter().cloned().collect();

// gives us the first error <-- Point 1
assert_eq!(Err("nope"), result);

let results = [Ok(1), Ok(3)];

let result: Result<Vec<_>, &str> = results.iter().cloned().collect();

// gives us the list of answers
assert_eq!(Ok(vec![1, 3]), result);
Run Code Online (Sandbox Code Playgroud)

我用我自己的一些代码跟进了这段代码(如下所示)

let results: [std::result::Result<i32, &str>; 2] = [Err("nope"), Err("bad")];

let result: Vec<Result<i32, &str>> = results.iter().cloned().collect();

// The following prints <-- Point 2
// "nope"
// "bad"
for x in result{ …
Run Code Online (Sandbox Code Playgroud)

documentation iterator collect rust

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