小编ryv*_*age的帖子

将Java Stream过滤为1并且只有1个元素

我正在尝试使用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)

java lambda java-8 java-stream

202
推荐指数
13
解决办法
16万
查看次数

使用Streams添加BigDecimals

我有一个BigDecimals的集合(在这个例子中,a LinkedList)我想加在一起.是否可以使用流?

我注意到这个Stream课有几种方法

Stream::mapToInt
Stream::mapToDouble
Stream::mapToLong
Run Code Online (Sandbox Code Playgroud)

每个都有一个方便的sum()方法.但是,我们知道,floatdouble算术几乎总是一个坏主意.

那么,有没有一种方便的方法来总结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 bigdecimal java-8 java-stream

158
推荐指数
5
解决办法
11万
查看次数

如何在我的JNLP应用程序中修复"缺少代码库,权限和应用程序名称清单属性"?

随着最新的Java更新,很多人都与他们的Java Web Start的麻烦应用程式缺乏Codebase,PermissionsApplication-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)

我该如何解决?

java jnlp java-web-start

29
推荐指数
2
解决办法
7万
查看次数

将对象流转换为链接的属性列表

我的目标:采取LinkedListUserS和提取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 lambda java-8 java-stream

17
推荐指数
1
解决办法
2万
查看次数

将java.sql.Date和java.util.Date转换为org.joda.time.LocalDate

我正在努力仔细并仔细地清理我的一些旧的(生产)代码.我要做的一件事就是将我的所有用法转换java.util.DateLocalDateDateTime.

但是,当我工作的时候,我注意到今晚有一个很大的障碍.我有这个代码:

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)

我转换lastnext到:

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 sql jodatime sql-date-functions

16
推荐指数
1
解决办法
2万
查看次数

变量已经在方法lambda中定义

考虑以下几乎可编译的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)

java lambda java-8

16
推荐指数
2
解决办法
1万
查看次数

通过移动小数来停止带有百分号的DecimalFormat

有没有办法阻止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)

java decimalformat

14
推荐指数
2
解决办法
5822
查看次数

LinkedHashSet .equals()vs LinkedList .equals()具有相同的元素但顺序不同

考虑以下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 …

java collections linked-list equals linkedhashset

8
推荐指数
1
解决办法
1868
查看次数

BigInteger :: intValueExact() - 有什么意义?

我注意到该类BigInteger在Java 8中收到了一个新方法:intValueExact().

我的问题是:为什么?

BigInteger bigInt = ... ;

bigInt.intValueExact();
Run Code Online (Sandbox Code Playgroud)

BigInteger已经有了intValue().本intValueExact()是为了抛出一个错误,当你BigInteger不成立的确切int价值,但我的问题是:这怎么可能给一个BigInteger不会等同于一个确切的数值int?有人能举例说明这种方法什么时候会抛出一个ArithmeticException

java biginteger

8
推荐指数
2
解决办法
3999
查看次数

jfreechart setbackgroundpaint没有做任何事情

对于有使用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 swing jfreechart

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