我正在尝试构建ISO 8601格式("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").我使用Java 8 DateFormatBuilder来解析ISO 8601格式的字符串.
当我遇到UTC时间格式的输出是"2016-11-01T16:51:35.000Z",但我真正需要的是00:00而不是Z.我尝试使用DateFormatBuilder构建但没有成功.
我终于完成了以下工作
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
DATETIMEFOMATTER = builder.parseCaseInsensitive()
.append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
.toFormatter();
ZonedDateTime zonedDate = ZonedDateTime.parse(date, DATETIMEFOMATTER);
String utcDate = zonedDate.format(FORMATTER);
if (utcDate.indexOf("Z") != -1){
utcDate = utcDate.replace("Z", "-00:00");
}
Run Code Online (Sandbox Code Playgroud)
我不想解析字符串并用"00:00"替换Z. Joda API更易于使用.有没有想过我们是否可以使用Java 8 DateTimeFormatterBuilder构建?我确实提到了一些stackoverflow问题,但没有工作.我可能做错了什么.有人可以帮忙吗?
由于maven-jibx-plugin期间发生异常,因此无法构建项目mvn install。
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T11:41:47-05:00)
Maven home: C:\Data\apps\apache-maven-3.3.9\bin\..
Java version: 1.8.0_112, vendor: Oracle Corporation
Java home: C:\Program Files (x86)\Java\jdk1.8.0_112\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "x86", family: "dos"
Run Code Online (Sandbox Code Playgroud)
无法在项目xxxx-core上执行目标org.jibx:maven-jibx-plugin:1.2.6:bind(默认):加载类java.lang.CharSequence时出错
<plugin>
<groupId>org.jibx</groupId>
<artifactId>maven-jibx-plugin</artifactId>
<version>1.2.6</version>
<configuration>
<includes>
<includes>*-binding.xml</includes>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>bind</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
[ERROR] Failed to execute goal org.jibx:maven-jibx-plugin:1.2.6:bind (default) on project xxxx-core: Error loading class java.lang.CharSequence: Error reading path …Run Code Online (Sandbox Code Playgroud) 我试图在命令行上指定一些GC调整选项,并且由于某种原因继续运行到"无法识别的选项"错误.
java -Dproperty1 = value -Dproperty2 = value2 -cp ./some/jarFile1.jar:./some/jarFile2.jar com.xyz.ClassFile -c/path/to/a/file -XX:+ UseG1GC -XX:+ UseStringDeduplication -XX:MaxGCPauseMillis = 200
回报
线程"main"中的异常org.apache.commons.cli.UnrecognizedOptionException:无法识别的选项:-XX:+ UseStringDeduplication
XX:MaxGCPauseMillis如果我删除了StringDeduplication,那么该选项也是如此.
运行Java 8,版本信息:
java version "1.8.0_66" Java(TM) SE Runtime Environment (build 1.8.0_66-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
任何线索都表示赞赏.
将传统的java验证转换为java 8函数式编程方式的最佳方法是什么?
if (obj != null) {
if(obj.isValid) {
someService.update(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
obj是一个Optional实例.例如:
Optional<Car> obj = Optional.ofNullable(dao.getCar())
Run Code Online (Sandbox Code Playgroud) 我正在尝试按产品类别对Product类的对象列表进行分组。不幸的是,Product类的编写方式是这样的:
class Product {
Map<String, String> property;
}
Run Code Online (Sandbox Code Playgroud)
产品类包含一个属性映射,这些属性之一称为“ ProductType”。例如,地图可以包含:
ProductType : Machine
Price : 1000
Name : Motor Cutter
......
Run Code Online (Sandbox Code Playgroud)
我们有一个产品清单。我在想用ProductType将它们分组为Map<String, List<Product>>使用Java 8的流和lamda表达式的正确方法是什么。
如果将Product类定义为:答案是显而易见的。
class Product {
String ProductType;
Double Price;
String Name;
}
Run Code Online (Sandbox Code Playgroud)
但是有了我们最上面的定义,我不知道如何实现这一点。
有人可以帮忙吗?
我使用一个简单的reduce方法,有三个参数即.身份,累加器和组合器.这是我的代码......
Integer ageSumComb = persons
.stream()
.reduce(0,
(sum, p) -> {
System.out.println("Accumulator: Sum= "+ sum + " Person= " + p);
return sum += p.age;
},
(sum1, sum2) -> {
System.out.format("Combiner: Sum1= " + sum1 + " Sum2= "+ sum2);
return sum1 + sum2;
Run Code Online (Sandbox Code Playgroud)
但正在发生的事情是Combiner没有被执行.我没有得到这背后的原因.这是我的输出..
Accumulator: Sum= 0 Person= Max
Accumulator: Sum= 18 Person= Peter
Accumulator: Sum= 41 Person= Pamela
Accumulator: Sum= 64 Person= David
Accumulator: Sum= 76 Person= Pam
Run Code Online (Sandbox Code Playgroud)
但是,没有编译错误,没有异常,我的输出完全正确,与我的预期相同.但是没有得到为什么组合器没有执行.
我试图在Java 8中了解泛型和通配符.但我无法理解为什么不能模拟这个存储库方法.代码非常简单,因此应该很容易重现.
我在"thenReturn"部分的"when"中得到了这个编译错误
The method thenReturn(Stream<capture#1-of ? extends Something>) in the type
OngoingStubbing<Stream<capture#1-of ? extends Something>> is not applicable
for the arguments (Stream<capture#3-of ? extends Something>)
Run Code Online (Sandbox Code Playgroud)
考试:
@Test
public void ItShourReturnStreamFromRepository() {
List<Something> list = new ArrayList<Something>();
list.add(new Something());
Stream<? extends Something> stream = list.stream();
when(someRepository.getStream()).thenReturn(stream);
}
Run Code Online (Sandbox Code Playgroud)
班级:
public class Something {}
Run Code Online (Sandbox Code Playgroud)
存储库:
public interface SomeRepository{
Stream<? extends Something> getStream();
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?谢谢!
我有一个叫做的类Numbers,并且在一些static表示基本操作的方法中,例如加法,减法,乘法,除法.
现在我想创建一个静态方法operate,该方法接收对前面static解释过的方法的引用.我怎样才能做到这一点?
public class Numbers {
public static long addition(long x, long y) {
return x + y;
}
public static long operate(/*a reference to a static method in Numbers class*/,
long x, long y) {
return reference(x, y);
}
}
Run Code Online (Sandbox Code Playgroud) 说我有这门课
public class MovieCharacter {
private String name;
public String getName() { return name ; }
public String setName(String name) { this.name = name; }
}
Run Code Online (Sandbox Code Playgroud)
我正在运行测试并有一个Set,我想使用Lambda来梳理每个对象,看它是否包含Name所需的字符串.如果找到名称,则布尔值跳转到"true".找到它之后,我不希望布尔值再次改变.
Set<MovieCharacter> mySet // assume this Set has previously been created and
// contains 1,000's of MovieCharacter
boolean hasName = false;
mySet.forEach( i -> i.getName().equals("Darth Vader")) // add here?
assertTrue(hasName);
Run Code Online (Sandbox Code Playgroud)
我知道我很接近,但是如何完成lambda线的关闭,以便如果该组包含一个MovieCharacter,其中.getName()返回"Darth Vader",则布尔值将被设置为true?但是,如果我正在检查的项目没有,它只是继续前进?
谢谢!
我在一个方法中有一个并行流,当我以这种方式运行时,它工作正常:
Meeting是一个接口,其实现具有private int id成员字段和一个getter方法getId();
public class MyClass {
private List<Meeting> myMeetings = new ArrayList<>();
public PastMeeting getPastMeeting (int id){
Meeting meetingWithId;
meetingWithId = myMeetings.parallelStream()
.filter(meeting -> meeting.getId() == id )
.findFirst()
.get();
return meetingWithId;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我将不得不从myClass中的其他几个方法执行此操作,因此我需要将该操作设置为自己的方法,并且我已将下面的方法添加到myClass,因为我可能有不同的Meeting实现,因此不同列表的类型也是如此,因此我将参数设置为通用.但是,当我以这种方式运行时,过滤器无法访问Meeting的getId()方法,称它"无法解析m.getId();"
private <T, R> T returnMeeting(T meeting, List<R> meetingList, int id) {
meeting = meetingList.parallelStream()
.filter(m -> m.getId() == id )
.findFirst()
.get();
return meeting;
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么,因为代码完全一样.运行泛型参数字段是否会导致lambda可以假设的中断?谢谢.