我试图使用 Java1.8 使用 help Stream 函数将下面的 for 循环转换为 forEach 方法,但我很困惑,也很困惑这样做。
List<A> valueList = new ArrayList<>();
List<B> responseList = getResponses();
List<A> value = new ArrayList<>();
for (B getResponse: responseList) {
valueList = getValues(getResponse);
value.addAll(valueList);
}
Run Code Online (Sandbox Code Playgroud) 是的,我见过类似的问题,但没有一个答案真正引导我找到解决方案。我没有在任何地方使用该线程,并且相同的代码在另一个 jhipster 应用程序中工作,所以我很困惑为什么这个 lift+shift 会导致 Hibernate 问题。
public UserDetailsContextMapper userDetailsContextMapper() {
return new UserDetailsContextMapper() {
@Override
public UserDetails mapUserFromContext(
DirContextOperations ctx, String username,
Collection<? extends GrantedAuthority> authorities) {
log.error("2 " + username + " -> " + ctx.toString());
String lowercaseLogonName = username.toLowerCase();
Optional<User> userFromDatabase = userRepository.findOneByLogin(lowercaseLogonName);
if (!userFromDatabase.isPresent()) {
User ldapUser = new User();
ldapUser.setLogin(lowercaseLogonName);
ldapUser.setPassword(RandomStringUtils.random(60)); // We use LDAP password, but the password need to be set
ldapUser.setActivated(true);
try {
Attribute attribute = ctx.getAttributes().get("mail");
ldapUser.setEmail( attribute != null && …Run Code Online (Sandbox Code Playgroud) 当扩展抽象类时,我理解为什么你必须重写一些方法。但当涉及到接口时,我不明白为什么必须这样做。如果一个接口的所有方法都必须实现,那么重写它们有什么用呢?
我正在谈论@Override注释。
@ExceptionHandler({ ConstraintViolationException.class })
public ResponseEntity<Object> handleConstraintViolation(ConstraintViolationException ex, WebRequest request) {
StringBuilder messageBuilder = new StringBuilder("Validation failed for: ");
ex.getConstraintViolations()
.stream()
.forEach(v -> messageBuilder
.append("property: [" + v.getPropertyPath() + "], value: [" + v.getInvalidValue() + "], constraint: [" + v.getMessage() + "]"));
return new ResponseEntity<>(responseBuilder
.createErrorResponse(INVALID_PARAMETER,
messageBuilder.toString()), getHeaders(), BAD_REQUEST);
}
Run Code Online (Sandbox Code Playgroud)
我想测试这个@ControllerAdvice方法
我正在阅读有关函数式接口(https://www.baeldung.com/java-8-function-interfaces)的内容,并且关于 a Supplier<T>,它是这样说的:
\n\n\n供应商的另一个用例是定义序列生成的逻辑。为了演示它,让\xe2\x80\x99s 使用静态 Stream.generate 方法来创建斐波那契数字流:
\n
int[] fibs = {0, 1};\nStream<Integer> fibonacci = Stream.generate(() -> {\n int result = fibs[1];\n int fib3 = fibs[0] + fibs[1];\n fibs[0] = fibs[1];\n fibs[1] = fib3;\n return result;\n});\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n传递给 Stream.generate 方法的函数实现了Supplier 功能接口。请注意,要用作生成器,供应商通常需要某种外部状态。在这种情况下,其状态由最后两个斐波那契数列组成。
\n\n为了实现这种状态,我们使用一个数组而不是几个变量,因为 lambda 内部使用的所有外部变量实际上都是 Final。
\n
我理解为什么变量在 lamdba 或匿名类中需要是最终的,我不明白的是为什么数组的值是“有效的最终”。
\n\n我用下面的例子来说明这一点:
\n\nfinal boolean run = true;\nexecutor.execute(() -> {\n while (run) {\n // do something\n }\n});\nRun Code Online (Sandbox Code Playgroud)\n\n这里run …
我搜索了类似的问题,但我只发现了不适用于这种情况的对象字符串:
想要转换List<List<Integer>> list为int[][] array使用流
到目前为止我得到了这个:
int[][] array= list.stream().map(List::toArray)...
Run Code Online (Sandbox Code Playgroud)
我以我发现的其他类似问题为基础。但这些使用 String 并且不能使其适用于 Integers->int:
// Example with String 1:
String[][] array = list.stream()
.map(l -> l.stream().toArray(String[]::new))
.toArray(String[][]::new);
// Example with String 2:
final List<List<String>> list = ...;
final String[][] array = list.stream().map(List::toArray).toArray(String[][]::new);
Run Code Online (Sandbox Code Playgroud) 我有DTO一些属性,例如id、name、desc等。
它的所有属性都有 getter 和 setter。
我从服务中得到一个Page<MyDto>,我需要根据属性对 DTO 进行分组name。
首先,我使用转换Page<MyDto>为。List<MyDto>page.getContent
我需要通过使用对其进行分组来将其转换List为Map<String, Object> (不是Map<String,String>)。namesJava8
我找到了一些例子,但它们没有解决我的问题。
如何将MyDto列表分组到地图中?
其中键是名称 ( String),值是Array<MyDto>每个名称的一个。
例如:
If `List<MyDto>` is :
[
{"id":1, "name":"albert", "desc":"science"},
{"id":2, "name":"george", "desc":"econ"},
{"id":3, "name":"christ", "desc":"math"},
{"id":4, "name":"george", "desc":"literature"} // george repeats twice
]
Run Code Online (Sandbox Code Playgroud)
输出Map应该是:
{
"george":
[
{"id":2, "name":"george", "desc":"econ"},
{"id":4, "name":"george", …Run Code Online (Sandbox Code Playgroud) 是否可以使用 Streams 过滤器访问列表的索引?我的意思是...我知道可以使用循环(while、for 等)来做到这一点,但就好像列表在变成流时会丢失有关索引的信息。
我想是这样的:
list.stream().filter(x -> x > 100)
.fiter(--getIndexOfEachValue--)
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
如果我有 List=[10,200,30,150,400,30]...
我期望结果=[1,3,4]
在 docker 容器中运行的 java 应用程序之一需要 java 1.8 但容器具有 java 1.7 。现在它失败并出现错误“不支持的major.minor版本52.0”
\n\ndockerfile内容是
\n\nFROM\xc2\xa0tomcat:8.0 \n\xc2\xa0 \xc2\xa0 \nCOPY\xc2\xa0webapps/abc /usr/local/tomcat/webapps/abc\nCOPY\xc2\xa0webapps/*.war /usr/local/tomcat/webapps/ \n\xc2\xa0 \xc2\xa0 \n#COPY\xc2\xa0........... \n\xc2\xa0 \xc2\xa0 \nCOPY\xc2\xa0tomcat-users.xml /usr/local/tomcat/conf/ \nCOPY\xc2\xa0server.xml /usr/local/tomcat/conf/ \nRun Code Online (Sandbox Code Playgroud)\n\n我尝试使用另一个基本映像“FROM tomcat:8.5.51-jdk8-openjdk”\n但 xdx 解析器出现错误。
\n\n我如何在该容器上安装/升级到 java 版本 1.8。\n我是 DOTNET-Windows 人员。我们公司收购的实验室之一就有这个应用程序。原来的开发团队现在不可用。\n非常感谢这方面的任何帮助。
\n我在我的 Mac 上为 Android Studio 安装了 JDK(我之前已经这样做过),并使用 Homebrew 进行安装。完成后我得到了这些建议?我想知道我是否希望系统 Java 包装器找到 JDK,我应该对其进行符号链接吗?以及为什么我会首先想要它?另外,我正在使用 .zshrc,因为它现在是默认的 Catalina,并且想知道我是否以相同的方式设置 $PATH 变量?
For the system Java wrappers to find this JDK, symlink it with
sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
openjdk is keg-only, which means it was not symlinked into /usr/local,
because it shadows the macOS `java` wrapper.
If you need to have openjdk first in your PATH run:
echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc
For compilers to find openjdk you may need to set:
export CPPFLAGS="-I/usr/local/opt/openjdk/include"```
Run Code Online (Sandbox Code Playgroud) java-8 ×10
java ×9
java-stream ×4
database ×1
docker ×1
foreach ×1
hashmap ×1
homebrew ×1
interface ×1
junit ×1
mockito ×1
overriding ×1
rest ×1
spring ×1
spring-boot ×1
spring-data ×1
stream ×1
tomcat ×1
tomcat8 ×1
zshrc ×1