小编Pav*_*vel的帖子

如何将每个循环重写为流?

我有一个名为"Book"的数据结构,它包含以下字段:

public final class Book {
    private final String title;
    private final BookType bookType;
    private final List<Author> authors;
}
Run Code Online (Sandbox Code Playgroud)

我的目标是Map<Author, List<BookType>>List<Book>使用Stream API 派生出来.

为了实现它,我首先制作了一个for-each循环来阐明解决方案的步骤,并在我将其重新编写为基于流的方法后逐步完成:

Map<Author, List<BookType>> authorListBookType = new HashMap<>();
books.stream().forEach(b -> b.getAuthors().stream().forEach(e -> {
     if (authorListBookType.containsKey(e)) {
        authorListBookType.get(e).add(b.getBookType());
     }  else {
        authorListBookType.put(e, new ArrayList<>(Collections.singletonList(b.getBookType())));
     }
}));
Run Code Online (Sandbox Code Playgroud)

但它不是基于Stream API的解决方案,而且我已陷入困境,我不知道如何正确完成它.我知道我必须使用分组收集器Map<Author, List<BookType>>从流中获取所需的直接.

你能给我一些提示吗?

java lambda java-stream

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

如何遵循有效的Java建议?

我已经完成了有效的Java书籍,之后我感到困惑.在本书中,Bloch坚持要求减少可变性,使字段最终,拒绝公共构造函数并支持工厂或构建器模式,使用最终类和方法禁用继承等.

但是现在我正在开发一个基于Spring框架的项目,并且:

  1. 所有实体都必须具有默认构造函数(Spring Data JPA)
  2. 所有服务都应该是非最终的,以模仿它们
  3. 所有课程都必须是非最终的,才有机会获得建议(Spring AOP,AspectJ)

第一眼看来,本书的大部分内容都被AOP,模拟和Spring Data/Hibernate所侵犯.

我该怎么处理呢?这本书在实践中没用吗?

java aop spring spring-data

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

如何将地图地图列表合并到地图中?

你能帮帮我Java Streams吗?

正如你从标题中看到的,我需要合并List<Map<String, Map<String, Genuineness>>>Map<String, Map<String, Genuineness>>.

该列表表示为List<Map<String, Map<String, Genuineness>>>:

[  
   {  
      "USER_1":{  
         "APP_1":{  
            "total":1,
            "totalGenuine":1,
            "totalDevelopment":1
         }
      },
      "USER_2":{  
         "APP_1":{  
            "total":1,
            "totalGenuine":1,
            "totalDevelopment":1
         },
         "APP_2":{  
            "total":2,
            "totalGenuine":2,
            "totalDevelopment":2
         }
      }
   },
   {  
      "USER_1":{  
         "APP_1":{  
            "total":1,
            "totalGenuine":1,
            "totalDevelopment":1
         }
      },
      "USER_2":{  
         "APP_1":{  
            "total":1,
            "totalGenuine":1,
            "totalDevelopment":1
         },
         "APP_2":{  
            "total":2,
            "totalGenuine":2,
            "totalDevelopment":2
         }
      }
   }
]
Run Code Online (Sandbox Code Playgroud)

因此,正如您所看到的,重复的键可能无处不在.我的目标是Map<String, Map<String, Genuineness>>通过合并将它们组合在一起Genuineness.合并Genuineness只是意味着返回一个新的对象与总结了值total,totalGenuinetotalDevelopment.

这是我的实现失败:

final Map<String, …
Run Code Online (Sandbox Code Playgroud)

java hashmap java-stream collectors

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

微服务中应该使用多线程吗?

如果微服务是可扩展的,例如部署为 AWS 上的 ECS,那么在微服务开发中是否应该使用并行编程?

如果是,那么与 N 个实例消耗相同资源相比,一个实例消耗更多资源有什么好处?

并行编程如何匹配https://12factor.net/

PS 更具体地说 - 我应该在概念上使用并行流而不是简单流吗?

java parallel-processing multithreading scalability 12factor

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

如何模拟 System.in?

你能解释一下如何System.in正确模拟吗?

我有一个简单的测试,我将值分配给

@Test
public void testBarCorrect() {
    System.setIn(new ByteArrayInputStream("7\n2\n3".getBytes()));
    someService().consume();
}
Run Code Online (Sandbox Code Playgroud)

在引擎盖下我什么都不做 new Scanner(System.in);

需要注意的是,有时我的测试是绿色的,但在 80% 时它会抛出一个 Exception "java.util.NoSuchElementException: No line found".

所以,如果我在测试中按下运行,它就会出现异常。

你能给我任何提示吗?

我的测试:

public class RecordServiceCTLIntegrationTest {

    private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
    private final PrintStream originalOut = System.out;
    private static final InputStream DEFAULT_STDIN = System.in;

    @Before
    public void setUpStreams() {
        System.setOut(new PrintStream(outContent));
        System.setIn(DEFAULT_STDIN);
    }

    @After
    public void rollbackChangesToStdin() {
        System.setOut(originalOut);
        System.setIn(DEFAULT_STDIN);
    }

    @Test
    public void testBarCorrect() {
        System.setIn(new ByteArrayInputStream("5\n1\nB\n21\n\n".getBytes()));
        buildRecordServiceCTL().run();
        assertEquals("Enter Room Id: No …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing system.in java.util.scanner

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

Java监视器的等待集是否优先于条目集?

我想问你一个关于Java多线程的问题。

我有一个监视器,多个线程渴望拥有它。此外,临界区内部this.wait()也会根据某些条件被调用。

AFAIK,监视器有 2 组线程:

  • 入口集 - 刚刚到达的线程聚集并等待轮到它们拥有监视器
  • wait set -this.wait()等待被唤醒的线程

notify但是当/notifyAll被调用时,它们如何竞争呢?等待集中的线程是否比条目集中的线程具有获取监视器的优先级,或者它们是否移动到条目集?

我能否确定下notify一个执行的线程将是等待集中的线程?

java concurrency multithreading mutex barrier

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

Spring @Async 中的默认值是什么?

你能告诉我 Spring 的默认参数是什么,@Async ThreadPoolTaskExecutor或者我怎么能找到我自己的参数?

maxPoolSize、corePoolSize 和 queueCapcity 的默认值是什么?

我应该覆盖它们以改进我的应用程序还是使用默认值就可以了?

java spring threadpoolexecutor spring-async

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

如何实现一个在原型上调用 destroy 方法的 bean 后处理器?

我正在阅读 Spring 文档并发现了这个

让 Spring 容器释放原型范围 bean 使用的资源的一种可能方法是使用自定义 bean 后处理器,该处理器将保存对需要清理的 bean 的引用。

但是,如果bean后处理器持有对原型对象的引用,那么垃圾收集器将不会清理它,并且原型bean及其资源将驻留在堆中,直到应用程序上下文关闭?

请您澄清一下好吗?

java spring prototype spring-ioc

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

如何在 Spring 测试中模拟属性源?

我正在为我的控制器编写单元测试,并遇到一个问题,即desktop.properties文件在我的构建服务器上不存在并且不应该存在于那里。

我有这个主要的 SpringBoot 类:

@Configuration
@ComponentScan(basePackages="com.xxx")
@EnableJpaRepositories(basePackages = "com.xxx")
@PropertySources(value = {@PropertySource("classpath:desktop.properties")})
@EnableAutoConfiguration(exclude={JmsAutoConfiguration.class, SecurityAutoConfiguration.class, MultipartAutoConfiguration.class})
@ImportResource(value = {"classpath:multipart.xml","classpath:column-maps-config.xml","classpath:model-ui-name-maps-config.xml"})
public class ApplicationConfig extends WebMvcConfigurerAdapter implements EnvironmentAware, WebApplicationInitializer {
}
Run Code Online (Sandbox Code Playgroud)

desktop.properties正如您所注意到的,这个类是导入的。

我有一个测试课程,开头是:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfig.class)
@WebAppConfiguration
public class SomeControllerTest {
}
Run Code Online (Sandbox Code Playgroud)

如果我的环境没有该desktop.properties文件或者我只是删除它,则无法运行测试,因为ApplicationConfig没有依赖项就无法实例化类。

我的问题是如何模拟desktop.properties或创建用于测试目的的自定义配置,以便替换@ContextConfiguration(classes = ApplicationConfig.class)我的测试上下文?

您能给我一些提示吗?

PS当前的项目是一个相当老的项目,版本也很旧,所以这只是我发现的一种为控制器创建测试的方法,对控制器进行最小的更改pom.xml

java spring spring-test spring-test-mvc

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

你能帮我合并几张地图的价值吗?

我正在尝试进行以下修改:

final Map<String, List<Map<String, String>>> scopes = scopeService.fetchAndCacheScopesDetails();
final Map<String, Map<String, String>> scopesResponse = scopes.entrySet().stream().collect
        (Collectors.toMap(Map.Entry::getKey, e -> e.getValue()
                .stream().collect(Collectors.toMap(s -> (String) s.get(SCOPE_NM), s -> (String) s.get(SCOPE_ID))))
        );
Run Code Online (Sandbox Code Playgroud)

但我面临"Duplicate key"错误,所以我想scopeResponses改为Map<String, Map<String, List<String>>>

你能告诉我如何将值合并s -> (String) s.get(SCOPE_ID)到一个ListSet在这种情况下?

java hashmap java-8 java-stream collectors

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