是否可以在mapToObj
方法中执行多个语句? 。假设我想使用以下代码将字符串转换为二进制字符串:
String str = "hello";
String bin = str.chars()
.mapToObj(x-> Integer.toBinaryString(x))
.collect(Collectors.joining(" "));
但是,我想用
之类的东西来处理前导零String.format("%8s", x).replaceAll(" ", "0")
那么,如何在mapToObj
方法中添加它。我是Java 8新功能的新手。任何帮助将不胜感激
答案 0 :(得分:6)
String str = "hello";
String bin = str.chars()
.mapToObj(x-> Integer.toBinaryString(x))
.map(str -> String.format("%8s", str).replaceAll(" ", "0"))
.collect(Collectors.joining(" "));
答案 1 :(得分:6)
您可以使用BigInteger
而不是替换空格填充,而是添加' 0'在格式化步骤中。这是有效的,因为BigInteger
被视为完整的。
String bin = str.chars()
.mapToObj(Integer::toBinaryString)
.map(BigInteger::new)
.map(x -> String.format("%08d", x))
.collect(Collectors.joining(" "));
正如@Holger建议使用long
而不是BigInteger
的解决方案更轻量级,因为Character.MAX_VALUE
的二进制表示不超过long
的限制。< / p>
String bin = str.chars()
.mapToObj(Integer::toBinaryString)
.mapToLong(Long::parseLong)
.mapToObj(l -> String.format("%08d", l))
.collect(Collectors.joining(" "));
答案 2 :(得分:3)
您可以在处理二进制字符串的import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.forms.fields.PdfTextFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.annot.PdfAnnotation;
import com.itextpdf.kernel.pdf.annot.PdfWidgetAnnotation;
public class problem5 {
public static void main(String[] args) throws IOException {
String fnPdf = "results/problem5.pdf";
PdfWriter writer = new PdfWriter(fnPdf);
PdfDocument pdf = new PdfDocument(writer);
PdfPage page = pdf.addNewPage();
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
// field
PdfTextFormField field = PdfFormField.createText(pdf);
field.setFieldName("fName");
// widget 1
Rectangle rect1 = new Rectangle(40, 750, 150, 20);
PdfWidgetAnnotation widget1 = new PdfWidgetAnnotation(rect1);
widget1.makeIndirect(pdf);
widget1.setFlag(PdfAnnotation.PRINT);
page.addAnnotation(widget1);
field.addKid(widget1);
// widget 2
Rectangle rect2 = new Rectangle(240, 750, 150, 20);
PdfWidgetAnnotation widget2 = new PdfWidgetAnnotation(rect2);
widget2.makeIndirect(pdf);
widget2.setFlag(PdfAnnotation.PRINT);
page.addAnnotation(widget2);
field.addKid(widget2);
// field
field.setValue("Dirk");
form.addField(field, page);
// ----
pdf.close();
Desktop.getDesktop().open(new File(fnPdf));
}
}
之后调用.map()
函数,例如:
.mapToObject()
答案 3 :(得分:3)
当然可以。它甚至不需要带有多个语句的lambda表达式。
String bin = str.chars()
.mapToObj(x-> String.format("%8s", Integer.toBinaryString(x)).replaceAll(" ", "0"))
.collect(Collectors.joining(" "));