当前位置: 首页 > 知识库问答 >
问题:

谁能帮我重组以下代码以避免共享可变性?

方祺
2023-03-14

我有一个需求,我想通过传递一组键(在本例中是数字)从数据库中获取数据,而数据库有接受一定数量参数的限制(比如500)。我写的代码如下:

AtomicInteger counter = new AtomicInteger();
List < Cat > catList = new ArrayList < > ();
List < Dog > dogList = new ArrayList < > ();
List < Integer > numbers = Stream.iterate(1, e - > e + 1)
    .limit(5000)
    .collect(Collectors.toList());
Collection < List < Integer >> partitionedListOfNumbers = numbers.stream()
    .collect(Collectors.groupingBy(num - > counter.getAndIncrement() / 500))
    .values(); //Split the list into lists of size 500
partitionedListOfNumbers.stream()
    .forEach(list - > {
        List < Cat > interimCatList = catRepo.fetchCats(list); //Cat list to be fetched from the database
        catList.addAll(interimCatList);
        List < Dog > interimDogList = dogRepo.fetchDogs(list); //Dog list to be fetched from database
        dogList.addAll(interimDogList);
    });

我知道上面的函数不纯粹,因为它改变了猫列表和狗列表。你介意帮我重新构建代码以避免共享可变性吗?

AtomicInteger counter = new AtomicInteger();
List < Cat > catList = new ArrayList < > ();
List < Dog > dogList = new ArrayList < > ();
List < Integer > numbers = Stream.iterate(1, e - > e + 1)
    .limit(5000)
    .collect(Collectors.toList());
Collection < List < Integer >> partitionedListOfNumbers = numbers.stream()
    .collect(Collectors.groupingBy(num - > counter.getAndIncrement() / 500))
    .values(); //Split the list into lists of size 500
partitionedListOfNumbers.stream()
    .forEach(list - > {
        List < Cat > interimCatList = catRepo.fetchCats(list); //Cat list to be fetched from the database
        catList.addAll(interimCatList);
        List < Dog > interimDogList = dogRepo.fetchDogs(list); //Dog list to be fetched from database
        dogList.addAll(interimDogList);
    });

共有1个答案

孟光耀
2023-03-14
Collection<List<Integer>> partitionedListOfNumbers = IntStream.rangeClosed(1,5000)
    .collect(Collectors.groupingBy(num - > counter.getAndIncrement() / 500))
    .values();
List<Cat> catList = partitionedListOfNumbers.stream()
    .map(list -> catRepo.fetchCats(list))
    .flatMap(List::stream)
    .collect(Collectors.toList());
List<Dog> dogList = partitionedListOfNumbers.stream()
    .map(list -> dogRepo.fetchDogs(list))
    .flatMap(List::stream)
    .collect(Collectors.toList());

您可以将基于列表列表检索动物的逻辑提取到接受函数的方法中,以避免代码的轻微重复,但我认为它解决了您的问题?

 类似资料:
  • 本文向大家介绍iOS 设置为元组以避免代码重复,包括了iOS 设置为元组以避免代码重复的使用技巧和注意事项,需要的朋友参考一下 示例 通过使用一个内衬设置变量元组,避免在构造函数中重复代码:            

  • 问题内容: 我使用一个简单的cms作为我网站的后端,在那里我可以更新新闻等。我想对SQL注入安全,所以我想知道这段代码是否被认为是安全的,或者是否可以做一些使其更安全的事情: 谢谢,祝你有美好的一天! 问题答案: 您没有在消毒 。 做一个就可以了,或(更好)拒绝共处理如果ID不是整数(假设ID是一个字段)。

  • 问题内容: 我有2个android应用程序,它们共享其95%的资源,布局,字符串等。只有几个jpg有所不同。 如何在不同的Eclipse Android项目之间共享资源,以避免资源重复? 问题答案: Eclipse提供了两种方法 创建一个库项目并将此库项目包含在两个应用程序项目中 创建一个共享源文件夹,转到您的项目属性,然后在“源”选项卡中,可以链接一个可能位于任何其他项目中的文件夹,并将这些文件

  • 目前有4种组合 增加小时。 增加天数。 减去小时。 减去天。 如果增加了一个新的期间(比如年),则有必要在每种情况下添加一个新的If语句: 此外,如果添加了新的意外情况(组合,特别是情况),则有必要重复逻辑以验证周期。 您有改进解决方案的建议吗?模式推荐,功能接口实现,欢迎任何推荐。 提前谢谢!

  • 在上述情况下,如果用户为空,则给出NPE。如何避免NPE?

  • 我不太理解while循环中的条件,以及它代表什么'>>>='。