我正在尝试使用Java 8 Stream来查找a中的元素LinkedList.但是,我想保证过滤条件只有一个匹配.
拿这个代码:
public static void main(String[] args) {
LinkedList<User> users = new LinkedList<>();
users.add(new User(1, "User1"));
users.add(new User(2, "User2"));
users.add(new User(3, "User3"));
User match = users.stream().filter((user) -> user.getId() == 1).findAny().get();
System.out.println(match.toString());
}
Run Code Online (Sandbox Code Playgroud)
static class User {
@Override
public String toString() {
return id + " - " + username;
}
int id;
String username;
public User() {
}
public User(int id, String username) {
this.id = id;
this.username = username;
}
public void setUsername(String username) …Run Code Online (Sandbox Code Playgroud) 我有一个BigDecimals的集合(在这个例子中,a LinkedList)我想加在一起.是否可以使用流?
我注意到这个Stream课有几种方法
Stream::mapToInt
Stream::mapToDouble
Stream::mapToLong
Run Code Online (Sandbox Code Playgroud)
每个都有一个方便的sum()方法.但是,我们知道,float和double算术几乎总是一个坏主意.
那么,有没有一种方便的方法来总结BigDecimals?
这是我到目前为止的代码.
public static void main(String[] args) {
LinkedList<BigDecimal> values = new LinkedList<>();
values.add(BigDecimal.valueOf(.1));
values.add(BigDecimal.valueOf(1.1));
values.add(BigDecimal.valueOf(2.1));
values.add(BigDecimal.valueOf(.1));
// Classical Java approach
BigDecimal sum = BigDecimal.ZERO;
for(BigDecimal value : values) {
System.out.println(value);
sum = sum.add(value);
}
System.out.println("Sum = " + sum);
// Java 8 approach
values.forEach((value) -> System.out.println(value));
System.out.println("Sum = " + values.stream().mapToDouble(BigDecimal::doubleValue).sum());
System.out.println(values.stream().mapToDouble(BigDecimal::doubleValue).summaryStatistics().toString());
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我正在总结BigDecimals BigDecimal::doubleValue(),但这(正如预期的那样)并不准确.
后代的回答后编辑:
这两个答案都非常有帮助.我想补充一点:我的现实场景不涉及原始集合BigDecimal,它们包含在发票中.但是,通过使用map()流的功能,我能够修改Aman Agnihotri的答案以解决这个问题: …
随着最新的Java更新,很多人都与他们的Java Web Start的麻烦应用程式缺乏Codebase,Permissions和Application-name清单属性.虽然有资源可以帮助你实现这一目标,但我找不到任何关于这个问题的全面答案,我觉得Q-and-A会很好.所以,这是问题:
我的Java Web Start应用程序在控制台中显示以下警告:
Missing Permissions manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Missing Codebase manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Missing Application-Name manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我的目标:采取LinkedList的UserS和提取LinkedList在一个优雅的,Java的8路的用户名.
public static void main(String[] args) {
LinkedList<User> users = new LinkedList<>();
users.add(new User(1, "User1"));
users.add(new User(2, "User2"));
users.add(new User(3, "User3"));
// Vanilla Java approach
LinkedList<String> usernames = new LinkedList<>();
for(User user : users) {
System.out.println(user.getUsername());
usernames.add(user.getUsername());
}
System.out.println("Usernames = " + usernames.toString());
// Java 8 approach
users.forEach((user) -> System.out.println(user.getUsername()));
LinkedList<String> usernames2 = users.stream().map(User::getUsername). // Is there a way to turn this map into a LinkedList?
System.out.println("Usernames = " + usernames2.toString());
}
static class …Run Code Online (Sandbox Code Playgroud) 我正在努力仔细并仔细地清理我的一些旧的(生产)代码.我要做的一件事就是将我的所有用法转换java.util.Date为LocalDate和DateTime.
但是,当我工作的时候,我注意到今晚有一个很大的障碍.我有这个代码:
ResultSet results = stmt.executeQuery();
Date last = results.getDate("LAST_DELIVERY_DATE");
Date next = results.getDate("NEXT_DELIVERY_DATE");
boolean received;
if (last == null && next == null) {
received = true; // order is not open
} else if (last == null) {
received = false;
} else {
received = true;
}
Run Code Online (Sandbox Code Playgroud)
我转换last和next到:
LocalDate last = new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));
Run Code Online (Sandbox Code Playgroud)
和Netbeans强调if == null并说:
Unnecessary test for null …Run Code Online (Sandbox Code Playgroud) 考虑以下几乎可编译的Java 8代码:
public static void main(String[] args) {
LinkedList<User> users = null;
users.add(new User(1, "User1"));
users.add(new User(2, "User2"));
users.add(new User(3, "User3"));
User user = users.stream().filter((user) -> user.getId() == 1).findAny().get();
}
static class User {
int id;
String username;
public User() {
}
public User(int id, String username) {
this.id = id;
this.username = username;
}
public void setUsername(String username) {
this.username = username;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return …Run Code Online (Sandbox Code Playgroud) 有没有办法阻止DecimalFormat对象自动将小数位移到右边两个位置?
这段代码:
double d = 65.87;
DecimalFormat df1 = new DecimalFormat(" #,##0.00");
DecimalFormat df2 = new DecimalFormat(" #,##0.00 %");
System.out.println(df1.format(d));
System.out.println(df2.format(d));
Run Code Online (Sandbox Code Playgroud)
生产:
65.87
6,587.00 %
Run Code Online (Sandbox Code Playgroud)
但我希望它产生:
65.87
65.87 %
Run Code Online (Sandbox Code Playgroud) 考虑以下SSCCE:
public static void main(String[] args) {
LinkedHashSet<String> set1 = new LinkedHashSet<>();
set1.add("Bob");
set1.add("Tom");
set1.add("Sam");
LinkedHashSet<String> set2 = new LinkedHashSet<>();
set2.add("Sam");
set2.add("Bob");
set2.add("Tom");
System.out.println(set1);
System.out.println(set2);
System.out.println(set1.equals(set2));
}
Run Code Online (Sandbox Code Playgroud)
这打印:
[Bob, Tom, Sam]
[Sam, Bob, Tom]
true
Run Code Online (Sandbox Code Playgroud)
然而,如果你LinkedHashSet改为LinkedList:
public static void main(String[] args) {
LinkedList<String> set1 = new LinkedList<>();
set1.add("Bob");
set1.add("Tom");
set1.add("Sam");
LinkedList<String> set2 = new LinkedList<>();
set2.add("Sam");
set2.add("Bob");
set2.add("Tom");
System.out.println(set1);
System.out.println(set2);
System.out.println(set1.equals(set2));
}
Run Code Online (Sandbox Code Playgroud)
它产生:
[Bob, Tom, Sam]
[Sam, Bob, Tom]
false
Run Code Online (Sandbox Code Playgroud)
我的问题是澄清.有人可以帮助理解这个吗?为什么一个LinkedHashSet被认为是平等的,而同样的LinkedList呢?我假设定义List …
我注意到该类BigInteger在Java 8中收到了一个新方法:intValueExact().
我的问题是:为什么?
BigInteger bigInt = ... ;
bigInt.intValueExact();
Run Code Online (Sandbox Code Playgroud)
BigInteger已经有了intValue().本intValueExact()是为了抛出一个错误,当你BigInteger不成立的确切int价值,但我的问题是:这怎么可能给一个BigInteger不会等同于一个确切的数值int?有人能举例说明这种方法什么时候会抛出一个ArithmeticException?
对于有使用jFreeChart for Swing应用程序经验的人:
我无法更改图表的背景.我的最终目标是为我的图表设置平滑的渐变背景,但我无法改变任何背景.这行代码chart.setBackgroundPaint(Color.BLUE);应该做点什么,对吗?但它没有改变任何东西.我得到的是相同的灰色情节背景和白色图表背景.

我正在摸不着为什么我不能让颜色改变......任何帮助都非常感谢!
这是我的代码(如果你有jfreechart库,可编译和可运行)
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Paint;
import java.awt.PaintContext;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import static java.awt.Transparency.OPAQUE;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.ColorModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* @author Ryan
*/
public class SalesGraph extends JPanel {
/**
* Creates a sample …Run Code Online (Sandbox Code Playgroud) java ×10
java-8 ×4
java-stream ×3
lambda ×3
bigdecimal ×1
biginteger ×1
collections ×1
equals ×1
jfreechart ×1
jnlp ×1
jodatime ×1
linked-list ×1
sql ×1
swing ×1