当Java 8发布时,我期望发现它的Optional实现与Guava的基本相同。从用户的角度来看,它们几乎是相同的。但是Java 8的Optional在内部使用null来标记一个空的Optional,而不是使Optional抽象并有两个实现。除了 Java 8 的版本感觉不对(你只是通过隐藏你实际上仍在使用它们的事实来避免空值)之外,每次你想访问它时检查你的引用是否为空不是效率较低吗?而不是仅仅调用一个抽象方法?也许不是,但我想知道他们为什么选择这种方法。
我一直在应用程序周围使用 modelmapper 和 java 8Options,它们工作得很好,因为它们是原始类型;直到我将模型对象的字段之一更改为可选类型。然后一切都崩溃了。事实证明,许多库不能很好地处理泛型。
这是结构
public class MyObjectDto
{
private Optional<MySubObjectDto> mySubObject;
}
public MyObject
{
privae Optional<MySubjObject> mySubObject;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试映射MyObjectDto到时MyObject, modelmapper 调用
public void setMySubObject(Optional<MySubObject> mySubObject){
this.mySubObject = mySubObject;
}
Run Code Online (Sandbox Code Playgroud)
with Optional<MySubObjectDto>,我不明白这怎么可能(它们之间没有继承)。当然,崩溃得很快。现在我已经改变了我的设置器以接受 Dto 类型只是为了度过这一天,但这从长远来看是行不通的。有没有更好的方法来解决这个问题,或者我应该创建一个问题?
I\xe2\x80\x99d 喜欢使用 Java 8 流来获取字符串流(例如从纯文本文件中读取)并生成句子流。我认为句子可以跨越界限。
\n\n例如,我想从:
\n\n"This is the", "first sentence. This is the", "second sentence."\nRun Code Online (Sandbox Code Playgroud)\n\n到:
\n\n"This is the first sentence.", "This is the second sentence."\nRun Code Online (Sandbox Code Playgroud)\n\n我可以看到它 \xe2\x80\x99s 可以得到句子部分的流,如下所示:
\n\nPattern p = Pattern.compile("\\\\.");\nStream<String> lines\n = Stream.of("This is the", "first sentence. This is the", "second sentence.");\n\nStream<String> result = lines.flatMap(s -> p.splitAsStream(s));\nRun Code Online (Sandbox Code Playgroud)\n\n但后来我\xe2\x80\x99m 不确定如何生成一个流来将片段连接成句子。我想以一种惰性的方式执行此操作,以便仅读取原始流中需要的内容。有任何想法吗?
\n我有一个java应用程序,在其中实现了日志记录。这是文件
log4j2.xml
<configuration xmlns:xi="http://www.w3.org/2001/XInclude" status="WARN">
<xi:include href="log4j-xinclude-appenders.xml" />
<xi:include href="log4j-xinclude-loggers.xml" />
</configuration>
Run Code Online (Sandbox Code Playgroud)
log4j-xinclude-appenders.xml
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<Routing name="RoutingAppender">
<Routes pattern="${ctx:logFileName}">
<Route>
<RollingFile name="Rolling-${ctx:logFileName}"
fileName="logs/${ctx:logFileName}.log"
filePattern="logs/${ctx:logFileName}-%d{MM-dd-yyyy}-%i.log">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %c{36} %l: %msg%n"/>
<SizeBasedTriggeringPolicy size="5 MB" />
<DefaultRolloverStrategy min="1" max="4" />
</RollingFile>
</Route>
<Route ref="Console" key="${ctx:logFileName}"/>
</Routes>
</Routing>
</appenders>
Run Code Online (Sandbox Code Playgroud)
log4j-xinclude-loggers.xml:
<loggers>
<root level="warn">
<appender-ref ref="Console" />
</root>
<logger name="abc.def.ghi.regulators" level="info" additivity="false">
<appender-ref ref="RoutingAppender" />
</logger>
<logger name="org.apache" level="info" />
<logger name="org.springframework" level="info" …Run Code Online (Sandbox Code Playgroud) 我在使用 ms access 数据库在 java 中制作登录页面时遇到一些问题。它没有从 MS Access 数据库获取用户名和密码。
try
{
String user=t.getText().trim();
String pass=t1.getText().trim();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con1=DriverManager.getConnection("jdbc:odbc:balogin");
Statement stat;
stat=con1.createStatement();
ResultSet rs=stat.executeQuery("select * from Table1 where user='"+user+"' and pass='"+pass+"'");
System.out.println("select * from Table1 where user='"+user+"' and pass='"+pass+"'");
int count=0;
while(rs.next())
{
{count=count+1;}
if(count==1)
{
JOptionPane.showMessageDialog(null,"User Found,Access Granted");
ControlPanel cp1=new ControlPanel();
cp1.display();
}
else
{
JOptionPane.showMessageDialog(null,"User not found");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 lambda 和 Collectors 转换hashset为hashmapJava 8,但我失败了。下面是我的代码:
Set<String> set = new HashSet<String>();
set.add("1");
set.add("2");
set.add("3");
HashMap<String, Integer> map = set.stream().collect(Collectors.toMap(x -> x, 0));
Run Code Online (Sandbox Code Playgroud)
但上面给出的错误如下:
The method toMap(Function<? super T,? extends K>, Function<? super T,? extends U>) in the type Collectors is not applicable for the arguments ((<no type> x) -> {}, int)
Run Code Online (Sandbox Code Playgroud)
我是 lambda 的新手。有什么帮助吗?
我知道这是一个常见的错误,我尝试解决这个问题,但我不能。我厌倦了使用最新的休眠验证器和旧版本,但这对我没有帮助。我用的是tomcat7。
错误 500:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean] for bean with name 'validator' defined in ServletContext resource [/WEB-INF/spring/webcontext/DispatcherServlet-context.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean] for bean with name 'validator' defined in ServletContext resource [/WEB-INF/spring/webcontext/DispatcherServlet-context.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
Run Code Online (Sandbox Code Playgroud)
我的 pom.xml:
<modelVersion>4.0.0</modelVersion>
<groupId>com.virnikandrapid</groupId>
<artifactId>microblog</artifactId>
<version>0.0.2-SNAPSHOT</version> …Run Code Online (Sandbox Code Playgroud) 我是使用 lambda 和流的新手。我正在尝试打印一个已排序并删除重复项并格式化的 ArrayList。我知道以下方法会起作用:
list.stream().distinct().forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)
这将产生 ADFJKLXZ 或我列表中的任何随机字符的输出。但是,我希望输出看起来像 A、D、F、J、K、L、X、Z
我已经尝试过这个:
list.stream().distinct().forEach(System.out::printf("%s, ", ));
Run Code Online (Sandbox Code Playgroud)
我想我可能仍然对 :: 为什么上面的代码不起作用以及我该如何修复它有一些困惑?
我对threadLocal的initialValue和withInital方法有点困惑。
考虑一种情况,我在父线程中有数据,并且我正在使用InheritableThreadLocal.
public class Parent extends Thread {
public static ThreadLocal<String> data = new InheritableThreadLocal<String>() {
@Override
protected String initialValue() {
return "temp";
}
};
public static void main(String[] args) {
new Parent().start();
}
public void run() {
data.set("parent data");
System.out.println("Parent Thread Value :" + data.get());
new ChildThread().start();
}
class ChildThread extends Thread {
public void run() {
System.out.println("Child Thread Value :" + Parent.data.get());
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Parent Thread Value : parent data …Run Code Online (Sandbox Code Playgroud) java multithreading thread-local java-8 inheritable-thread-local
我可以看到 Java 8 新的日期时间 API 有很多类 LocalDateTime、LocalDate、LocalTime。我可以得到一年中的第一个日期,例如:
LocalDateTime first = LocalDateTime.of(LocalDate.now().getYear(), 1, 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
如何在 Java 8 新日期时间 API 中获取一年的最后一天?
java-8 ×10
java ×8
java-stream ×2
cron ×1
dictionary ×1
guava ×1
jdbc-odbc ×1
lambda ×1
linux ×1
log4j2 ×1
modelmapper ×1
ms-access ×1
null ×1
option-type ×1
printf ×1
set ×1
spring ×1
spring-mvc ×1
thread-local ×1